我们应该在什么时候调用多进程.Pool.Join?
问题描述
我正在使用‘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.close
或pool.join
?
解决方案
不,您不需要,但如果您不再使用池,这可能是个好主意。
调用pool.close
或pool.join
的原因蒂姆·彼得斯在this SO post中说得很好:
至于Pool.lose(),您应该在您永远不会向Pool实例提交更多工作时调用它。因此,Pool.lose()通常在主程序的可并行化部分完成时调用。然后,当已分配的所有工作都已完成时,工作进程将终止。
调用Pool.Join()以等待工作进程终止也是一种很好的实践。除了其他原因外,通常没有很好的方法来报告并行化代码中的异常(异常发生在与您的主程序正在做的事情模糊相关的上下文中),而Pool.Join()提供了一个同步点,它可以报告在工作进程中发生的一些异常,否则您永远看不到这些异常。
相关文章