我一直在研究Python的多处理库,虽然它提供了一个非常容易使用的API,但它的文档并不总是很清楚。特别是,参数'maxtasksperchild‘传递给Pool类的一个实例,我觉得非常令人困惑。
以下内容直接来自Python的文档(3.7.2):
maxtasksperchild是一个工作进程在退出并被替换为一个新的辅助进程之前可以完成的任务数,以便释放未使用的资源。默认的maxtasksperchild为None,这意味着工作进程将与池一样长。
以上这些问题给我带来的问题比它所回答的要多。对于一个工人过程来说,活得和池一样长,是不是很糟糕?是什么使工人的过程“新鲜”,什么时候需要?通常,什么时候应该显式地设置maxtasksperchild的值,而不是让它默认为'None‘,以及为了最大限度地提高处理速度,应该考虑什么最佳实践?
从@Darkonaut's amazing answer on chunksize,我现在了解了块大小所做的和表示的内容。由于为大批量提供一个值会影响“任务”的数量,我想知道是否应该考虑到它们的依赖,以确保最大的性能?
谢谢!
发布于 2019-03-03 23:57:16
通常你不需要碰这个。例如,有时在Python外部调用代码时可能会出现问题。限制工作进程在被替换之前所做的任务的数量,这样会有所帮助,因为当进程被废弃时,他错误地积累的“未使用资源”会被释放。启动一个新的,“新鲜”的过程,然后保持问题的控制。因为替换流程需要时间,所以为了性能,默认情况下允许maxtasksperchild。当有一天您遇到无法解释的资源问题时,您可以尝试设置maxtasksperchild=1来查看这是否改变了什么。如果是的话,很可能有什么东西漏了什么东西。
https://stackoverflow.com/questions/54974817
复制相似问题