DoCPLEX:如果2个解决方案之一完成,则杀死解决方案

时间:2020-09-03 22:08:28

标签: python parallel-processing concurrent.futures docplex

我正在研究有2个模型的DoCplex问题。我正在使用ThreadPoolExecutor()并行运行求解。但是,一旦解决方案之一完成,是否有可能杀死其中一种解决方案? 我正在使用以下代码:


def work(slvr):
    print("This is worker", slvr)

    # do stuff
    
    mdl= slvr.solve(clean_before_solve=True,log_output=True)
    return mdl

with concurrent.futures.ThreadPoolExecutor() as executor:
    
    future_to_area = {executor.submit(work, slvr): slvr for slvr in a}

    for future in concurrent.futures.as_completed(future_to_area):
        id = future_to_area[future]

1 个答案:

答案 0 :(得分:0)

我认为这与docplex无关,而是一个更笼统的问题:运行多个线程,如何在第一个线程完成后立即终止所有剩余线程?

执行此操作的一个选项是创建一个额外的线程来接收future_to_area映射(因此必须在提交所有docplex线程后 创建它)。还创建一个由条件变量保护的变量winner。一旦docplex线程完成,它将winner设置为其ID或Future并向条件变量发出信号。

除非winner变为非None,否则其他线程将等待条件变量。一旦不是None,就知道其中一个docplex线程已完成。此时,if通过在相应的未来调用future_to_area来停止cancel()中的所有其他线程。