我一直在研究Python的多处理库,尽管它提供了非常易于使用的API,但是其文档并不总是很清楚。特别是,参数“ maxtasksperchild”传递给了Pool类的一个实例,我感到非常困惑。
以下内容直接来自Python文档(3.7.2):
maxtasksperchild 是一个工作进程可以退出并被新的工作进程取代之前可以完成的任务数,以释放未使用的资源。默认的maxtasksperchild为None,这意味着工作进程将与池一样长。
以上内容对我提出的问题多于答案。工人进程像池一样长生存下去是否不好?是什么使工作程序“新鲜”?何时需要?通常,什么时候应该显式设置maxtasksperchild的值,而不是将其默认设置为“ None”?为了使处理速度最大化,什么是最佳做法?
现在,我从@Darkonaut's amazing answer on chunksize了解了chunksize的功能和代表的含义。因为提供块大小的值会影响“任务”的数量,所以我想知道是否应该考虑有关它们的依赖性以确保最佳性能?
谢谢!
答案 0 :(得分:1)
通常,您无需触摸此按钮。例如,有时在Python外泄漏的代码调用会引起问题。限制工作流程在被替换之前的任务数量会有所帮助,因为当流程被废弃时,他错误累积的“未使用资源”会被释放。然后,开始一个新的“新”过程即可解决问题。由于替换进程需要时间,因此为了提高性能,请默认使用maxtasksperchild
。有一天,当您遇到无法解释的资源问题时,可以尝试设置maxtasksperchild=1
来查看这是否有所改变。如果确实如此,则可能是某物在泄漏某物。