多处理提前退出

时间:2018-04-02 23:38:09

标签: python multiprocessing python-multiprocessing

我有一个循环正在检查值为True的值的第一个实例:

for i in l:
    if fun(i):
        return i
return None

我想使用多处理池加快速度,但我的理解是,池化只会fun l上的每个元素。有没有办法做一种短路"合并时?

1 个答案:

答案 0 :(得分:2)

这就是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')