首页 > 解决方案 > Python 多处理池:maxtasksperchild

问题描述

我一直在涉足 Python 的多处理库,虽然它提供了一个非常易于使用的 API,但它的文档并不总是很清楚。特别是,传递给 Pool 类实例的参数“maxtasksperchild”让我感到非常困惑。

以下内容直接来自 Python 的文档(3.7.2):

maxtasksperchild是工作进程在退出并被新的工作进程替换之前可以完成的任务数,以释放未使用的资源。默认的 maxtasksperchild 是 None,这意味着工作进程将与池一样长。

以上对我提出的问题比它回答的要多。工作进程与池一样长是不是很糟糕?是什么让工作进程“新鲜”?什么时候需要?一般来说,什么时候应该明确设置 maxtasksperchild 的值,而不是让它默认为“无”,为了最大限度地提高处理速度,什么被认为是最佳实践?

@Darkonaut 对 chunksize 的惊人回答,我现在了解了 chunksize 的作用和代表。由于为 chunksize 提供值会影响“任务”的数量,我想知道是否应该考虑它们的依赖性以确保最大性能?

谢谢!

标签: pythonmultiprocessingpython-multiprocessingpool

解决方案


通常你不需要触摸它。例如,有时可能会出现在 Python 外部调用代码泄漏内存的问题。限制工作进程在被替换之前执行的任务数量会有所帮助,因为当进程被废弃时,他错误地积累的“未使用资源”会被释放。开始一个新的、“新鲜的”过程,然后保持问题得到控制。maxtasksperchild因为替换一个进程需要时间,所以默认情况下你会得到性能。当你有一天遇到无法解释的资源问题时,你可以尝试设置maxtasksperchild=1看看这是否会改变一些东西。如果是这样,很可能是某些东西正在泄漏。


推荐阅读