我们什么时候应该调用multiprocessing.Pool.join?

2020/12/07 11:11 · python ·  · 0评论

我正在使用'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.closepool.join之后的for循环?

不,您没有,但是如果您不再使用游泳池,那可能是个好主意。

Tim Peters在此SO帖子中致电pool.close致电的理由pool.join很明确

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

调用Pool.join()等待工作进程终止也是一种很好的做法。除其他原因外,通常没有很好的方法来报告并行化代码中的异常(异常仅在与您的主程序正在执行的内容有关的上下文中发生),并且Pool.join()提供了一个同步点,可以报告发生的某些异常在您否则无法看到的工作流程中。

我遇到了相同的内存问题,因为当我不使用Python时,pool.close()以及与用于计算Levenshtein距离的函数一起使用pool.join(),Python的multiprocessing.pool的内存使用率一直在增长pool.map()该功能运行良好,但是在Win7 64机器上没有正确收集垃圾,并且每次调用该功能之前,内存使用率一直在失控,直到整个操作系统崩溃。这是修复漏洞的代码:

stringList = []
for possible_string in stringArray:
    stringList.append((searchString,possible_string))

pool = Pool(5)
results = pool.map(myLevenshteinFunction, stringList)
pool.close()
pool.join()

关闭并加入池后,内存泄漏消失了。

本文地址:http://python.askforanswer.com/womenshenmeshihouyinggaidiaoyongmultiprocessing-pool-join.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!