我一直在涉足 Python 的多处理库,虽然它提供了一个非常容易使用的 API,但它的文档并不总是很清楚。特别是,参数“maxtasksperchild”传递给 Pool 类的一个实例,我觉得非常困惑。
以下内容直接来自 Python 的文档 (3.7.2):
以上对我提出的问题比它回答的要多。工作进程与池一样长是否有害?是什么让工作进程“新鲜”,什么时候需要?一般来说,什么时候应该明确设置 maxtasksperchild 的值而不是让它默认为“无”,以及为了最大化处理速度而被认为是最佳实践?
从 @Darkonaut's amazing answer on chunksize 我现在了解了 chunksize 的作用和代表。由于为 chunksize 提供值会影响“任务”的数量,我想知道是否应该考虑它们的依赖性以确保最大性能?
谢谢!
最佳答案
通常你不需要触摸它。例如,有时会出现 Python 外部调用代码泄漏内存的问题。限制工作进程在被替换之前执行的任务数量会有所帮助,因为当进程报废时,他错误积累的“未使用的资源”会被释放。开始一个新的、“新鲜”的过程然后保持问题得到控制。因为替换进程需要时间,所以为了性能你默认使用 maxtasksperchild
。当有一天你遇到无法解释的资源问题时,你可以尝试设置 maxtasksperchild=1
看看这是否会改变一些东西。如果是这样,则可能是某些内容正在泄漏。
关于Python 多处理池 : maxtasksperchild,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54974817/