我们应该在什么时候调用多进程.Pool.Join? [英] When should we call multiprocessing.Pool.join?

查看:12
本文介绍了我们应该在什么时候调用多进程.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.closepool.join

推荐答案

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

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

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

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

这篇关于我们应该在什么时候调用多进程.Pool.Join?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆