多处理提前退出

Tek*_*lia 2 python multiprocessing python-multiprocessing

我有一个循环正在检查计算结果为的值的第一个实例True

for i in l:
    if fun(i):
        return i
return None
Run Code Online (Sandbox Code Playgroud)

我想使用多处理池来加快速度,但我的理解是池只会funl. 有没有办法在池化时进行某种“短路”?

tde*_*ney 5

这就是该terminate方法的用途,但是您必须小心如何使用它。它会杀死工作进程,但令人惊讶的是它不会阻止您永远阻塞等待的调用。因此,只有在您这样做apply_asyncimap_unordered致电时才能使用它。从另一个线程关闭通常会导致对池的调用挂起。在此示例中,我设置chunksize为 1,如果单个工作项具有大量处理量,则这是首选值。chunksize如果工作项成本较低并且您不介意在完成之前处理更多项目,则可以设置为更大的值。但不要使用默认值...必须在任何东西返回给您之前处理项目。

import multiprocessing

def worker(item):
    print(item)
    return item

if __name__ == "__main__":
    with multiprocessing.Pool(4) as pool:
        for i in pool.imap_unordered(worker, range(100), chunksize=1):
            if i == 10:
                print('terminate')
                pool.terminate()
                break
    print('done')
Run Code Online (Sandbox Code Playgroud)