使用多处理并行运行多个cplex模型的问题

时间:2020-06-26 09:30:07

标签: python-3.x multithreading multiprocessing cplex docplex

我想使用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上运行。