Python 多处理池:maxtasksperchild

Python multiprocessing pool: maxtasksperchild

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

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

maxtasksperchild is the number of tasks a worker process can complete before it will exit and be replaced with a fresh worker process, to enable unused resources to be freed. The default maxtasksperchild is None, which means worker processes will live as long as the pool.

以上对我提出的问题比它回答的要多。工作进程和池一样长是不是不好?什么使工作进程 'fresh' 以及何时需要?一般来说,什么时候应该显式设置 maxtasksperchild 的值而不是让它默认为 'None'?为了最大化处理速度,什么被认为是最佳实践?

来自 我现在明白了 chunksize 的作用和代表。由于为 chunksize 提供一个值会影响 'tasks' 的数量,我想知道是否应该考虑它们的依赖性以确保最佳性能?

谢谢!

通常你不需要碰这个。例如,有时在 Python 外部调用代码可能会出现内存泄漏问题。限制工作进程在他被替换之前执行的任务数量会有所帮助,因为当进程被废弃时,他错误地积累的 "unused resources" 会被释放。启动一个新的 "fresh" 进程然后将问题包含在内。因为替换一个进程需要时间,为了性能你默认让maxtasksperchild。当某天你 运行 遇到无法解释的资源问题时,你可以尝试设置 maxtasksperchild=1 看看这是否改变了什么。如果确实如此,则可能 某事 正在泄漏 某事