多处理早期Exi

2024-09-27 17:57:54 发布

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

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

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

我想使用多处理池来加速这个过程,但是我的理解是池只会在l中的每个元素上运行fun。有没有一种方法可以在合用时实现某种“短路”?在


Tags: 实例方法innonetrue元素forreturn
1条回答
网友
1楼 · 发布于 2024-09-27 17:57:54

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

相关问题 更多 >

    热门问题