DoCPLEX:如果两个解算中的一个解算完成,则终止解算

2024-10-04 07:38:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究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]

Tags: totrueforasfuturearea解决方案concurrent
1条回答
网友
1楼 · 发布于 2024-10-04 07:38:00

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

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

附加线程等待条件变量,除非winner变为非None。只要这不是None,它就知道其中一个docplex线程已完成。此时,if通过在各自的将来调用cancel()来停止future_to_area中的所有其他线程

相关问题 更多 >