Python 多处理池:maxtasksperchild

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看看这是否会改变一些东西。如果是的话,很可能一些被泄露的东西

  • @Marnix.hoh 不客气!很确定您关于“专家”的说法不正确,但感谢您的反馈;) (2认同)
  • @Marnix.hoh... 会有复制,但在每种情况下这都不是问题。如果您需要多个进程修改同一个复杂对象,那么使用管理器和代理可能是一种选择,或者您可以查看类似 [ray](https://github.com/ray-project/ray) 的内容。 (2认同)

归档时间:

查看次数:

4572 次

最近记录:

6 年,9 月 前