hch*_*hch 63 python python-multiprocessing
我正在使用'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
Run Code Online (Sandbox Code Playgroud)
我需要打电话pool.close
还是pool.join
在for循环之后?
Bam*_*lur 77
不,你没有,但如果你不再使用游泳池,这可能是一个好主意.
蒂姆·彼得斯在这篇SO帖子中打电话pool.close
或pool.join
说得好的原因:
至于Pool.close(),你应该在 - 当且 - 只是 - 你永远不会向Pool实例提交更多工作时调用它.因此,当主程序的可并行化部分完成时,通常会调用Pool.close().然后,当已经分配的所有工作都已完成时,工作进程将终止.
调用Pool.join()以等待工作进程终止也是一种很好的做法.除了其他原因,往往是报告在并行代码中的异常没有什么好办法(发生的异常在上下文中只隐约涉及到你的主程序是做),和Pool.join()提供了一个同步点可以报告说发生了一些异常在工作流程中,你从来没有看到过.
Ody*_*aca 36
我有同样的内存问题,因为当我没有使用和使用计算Levenshtein距离的函数时,内存使用量会随着Python的multiprocessing.pool而增长.该功能运行良好,但没有在Win7 64机器上正确地进行垃圾收集,并且每次调用该函数时内存使用量都会逐渐失控,直到整个操作系统关闭为止.这是修复泄漏的代码:pool.close()
pool.join()
pool.map()
stringList = []
for possible_string in stringArray:
stringList.append((searchString,possible_string))
pool = Pool(5)
results = pool.map(myLevenshteinFunction, stringList)
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
关闭并加入池后,内存泄漏消失了.
归档时间: |
|
查看次数: |
52954 次 |
最近记录: |