PYTHON多处理池:MaxtaskperChild
问题描述
我一直在尝试使用Python的多处理库,尽管它提供了一个非常容易使用的API,但它的文档并不总是非常清楚。特别是,传递给Pool类的一个实例的参数‘MaxtaskperChild’让我感到非常困惑。
以下内容直接摘自Python的文档(3.7.2):
MaxtaskperChild是工作进程在退出并替换为新的工作进程以释放未使用的资源之前可以完成的任务数。默认的MaxtaskperChild为NONE,这意味着工作进程将与池一样长。
以上给我带来的问题多于它所回答的问题。工作进程与池一样长的生存时间是不是很糟糕?是什么让工作流程变得"新鲜"?什么时候才是所需的?一般来说,您应该在什么时候显式设置MaxtaskperChild的值,而不是将其默认为‘None’?为了最大限度地提高处理速度,您认为哪些是最佳实践?
从@Darkonaut's amazing answer on chunksize中,我现在了解了块大小的作用和表示。由于提供区块大小的值会影响"任务"的数量,我想知道是否应该考虑它们的依赖关系以确保最高性能?谢谢!
解决方案
通常您不需要触摸它。例如,有时在Python外部调用代码可能会出现内存泄漏的问题。限制工作进程在被替换之前执行的任务数量会有所帮助,因为当进程被废弃时,他错误积累的"未使用资源"会被释放。然后,开始一个新的、"新鲜的"过程,让问题得到控制。因为替换一个进程需要时间,为了提高性能,默认情况下让maxtasksperchild
。当有一天遇到无法解释的资源问题时,可以尝试设置maxtasksperchild=1
,看看这是否会改变什么。如果是,则可能是某物泄漏了某物。
相关文章