我们应该在什么时候调用多进程.Pool.Join?

2022-04-10 00:00:00 python python-multiprocessing

问题描述

我正在使用‘Multicess.Pool.imap_unorded’,如下所示

from multiprocessing import Pool
pool = Pool()
for mapped_result in pool.imap_unordered(mapping_func, args_iter):
    do some additional processing on mapped_result

是否需要在for循环之后调用pool.closepool.join


解决方案

不,您不需要,但如果您不再使用池,这可能是个好主意。

调用pool.closepool.join的原因蒂姆·彼得斯在this SO post中说得很好:

至于Pool.lose(),您应该在您永远不会向Pool实例提交更多工作时调用它。因此,Pool.lose()通常在主程序的可并行化部分完成时调用。然后,当已分配的所有工作都已完成时,工作进程将终止。

调用Pool.Join()以等待工作进程终止也是一种很好的实践。除了其他原因外,通常没有很好的方法来报告并行化代码中的异常(异常发生在与您的主程序正在做的事情模糊相关的上下文中),而Pool.Join()提供了一个同步点,它可以报告在工作进程中发生的一些异常,否则您永远看不到这些异常。

相关文章