0

我想使用 python 多处理同时解决多个 cplex 模型。我知道python中多处理的基本示例是这样的:

from multiprocessing import Process

def func1():

 '''some code'''

def func2():

'''some code'''

if __name__=='__main__':
    p1 = Process(target = func1)
    p1.start()
    p2 = Process(target = func2)
    p2.start()
    p1.join()
    p2.join()

我的脚本结构如下:

Model1(args**):
'''cplex model written with docplex'''
return model

Model2(args**):
'''cplex model written with docplex'''
return model

Generate_pool1(args**):
    cpx = mdl.get_cplex()
    cpx.parameters.parallel.set(1)
    cpx.parameters.threads.set(5)
    cpx.parameters.emphasis.mip.set(4)
    cpx.parameters.simplex.tolerances.markowitz.set(0.999)
    cpx.parameters.simplex.tolerances.optimality.set(1e-9)
    cpx.parameters.simplex.tolerances.feasibility.set(1e-9)
    cpx.parameters.mip.pool.intensity.set(4)
    cpx.parameters.mip.pool.absgap.set(1e75)
    cpx.parameters.mip.pool.relgap.set(1e75)
    cpx.populatelim=50
    
    numsol = cpx.solution.pool.get_num()
    return numsol


Generate_pool2(args**):
    cpx = mdl.get_cplex()
    cpx.parameters.parallel.set(1)
    cpx.parameters.threads.set(5)
    cpx.parameters.emphasis.mip.set(4)
    cpx.parameters.simplex.tolerances.markowitz.set(0.999)
    cpx.parameters.simplex.tolerances.optimality.set(1e-9)
    cpx.parameters.simplex.tolerances.feasibility.set(1e-9)
    cpx.parameters.mip.pool.intensity.set(4)
    cpx.parameters.mip.pool.absgap.set(1e75)
    cpx.parameters.mip.pool.relgap.set(1e75)
    cpx.populatelim=50
    
    numsol = cpx.solution.pool.get_num()
    return numsol

main():
 for i in range(len(data)-1):
    m1=Model1(data[i])
    m2=Model2(data[i+1])
    p1 = Process(target = Generate_pool1,(m1,i),)
    p1.start()
    p2 = Process(target = Generate_pool2,(m2,i+1),)
    p2.start()
    p1.join()
    p2.join()

当我运行此代码时,cplex 部分不起作用。控制台继续运行,但没有任何反应,并且该过程不会自行完成,我每次都必须用键盘中断它。我的引擎有 32 个虚拟内核,它在 spyder -windows 10 上运行。

4

1 回答 1