Python多处理池:maxtasksperchild

问题描述 投票:1回答:1

我一直在使用Python的多处理库,虽然它提供了一个非常容易使用的API,但它的文档并不总是很清楚。特别是,传递给Pool类的实例的参数'maxtasksperchild'我发现非常混乱。

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

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

以上问题为我提出了比答案更多的问题。对于工人流程来说,只要在游泳池中生活就不好了吗?是什么让工人流程“新鲜”,什么时候需要?一般来说,何时应该明确设置maxtasksperchild的值而不是将其默认设置为“None”以及为了最大化处理速度而被认为是最佳实践?

@Darkonaut's amazing answer on chunksize我现在明白chunksize的作用和代表。因为为chunksize提供一个值会影响“任务”的数量,所以我想知道是否应该考虑他们对确保最大性能的依赖性?

谢谢!

python multiprocessing python-multiprocessing pool
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.