Mar*_*hoh 8 python pool multiprocessing python-multiprocessing
我一直在涉足 Python 的多处理库,虽然它提供了一个非常容易使用的 API,但它的文档并不总是很清楚。特别是,我发现传递给 Pool 类实例的参数“maxtasksperchild”非常令人困惑。
以下内容直接来自 Python 的文档 (3.7.2):
maxtasksperchild是工作进程在退出并被新工作进程替换之前可以完成的任务数,以释放未使用的资源。默认的 maxtasksperchild 是 None,这意味着工作进程将与池一样长。
以上对我提出的问题比它回答的要多。工作进程与池一样长是否有害?是什么让工作进程“新鲜”,什么时候需要?一般来说,什么时候应该明确设置 maxtasksperchild 的值而不是让它默认为“无”,以及为了最大化处理速度而被认为是最佳实践?
从@Darkonaut 关于 chunksize 的惊人答案中,我现在了解了 chunksize 的作用和代表。由于为 chunksize 提供值会影响“任务”的数量,我想知道是否应该考虑它们的依赖性以确保最大性能?
谢谢!
Dar*_*aut 15
通常你不需要触摸它。例如,有时会出现 Python 外部调用代码泄漏内存的问题。限制工作进程在被替换之前执行的任务数量会有所帮助,因为当进程报废时,他错误地积累的“未使用的资源”会被释放。开始一个新的、“新鲜”的过程然后保持问题得到控制。因为替换一个进程需要时间,所以为了性能你maxtasksperchild默认。当有一天你遇到无法解释的资源问题时,你可以尝试设置maxtasksperchild=1看看这是否会改变一些东西。如果是的话,很可能一些被泄露的东西。
| 归档时间: |
|
| 查看次数: |
4572 次 |
| 最近记录: |