我们什么时候应该调用multiprocessing.Pool.join?
我正在使用’multiprocess.Pool.imap_unordered’如下
from multiprocessing import Pool
pool = Pool()
for mapped_result in pool.imap_unordered(mapping_func, args_iter):
do some additional processing on mapped_result
我需要打电话pool.close
或pool.join
之后的for循环?
-
不,您没有,但是如果您不再使用游泳池,那可能是个好主意。
Tim Peters在此SO帖子中致电
pool.close
或致电的理由pool.join
很明确:至于Pool.close(),您应该在永远不会将更多工作提交给Pool实例的情况下(且仅在)进行调用。因此,通常在主程序的可并行化部分完成时调用Pool.close()。然后,当所有已分配的工作完成时,工作进程将终止。
调用Pool.join()等待工作进程终止也是一种很好的做法。除其他原因外,通常没有很好的方法来报告并行化代码中的异常(异常仅在与您的主程序正在执行的内容有关的上下文中发生),并且Pool.join()提供了一个同步点,可以报告发生的某些异常在您否则无法看到的工作流程中。