我一直在涉猎Python的多进程库,虽然它提供了非常易于使用的API,但其文档并不总是很清晰。特别是,我发现传递给Pool类实例的"maxtasksperchild"参数非常令人困惑。
以下内容直接来自Python文档(3.7.2):
maxtasksperchild是工作进程可以完成的任务数,在达到此数值之后,该进程将退出并被一个新的进程替换,以便释放未使用的资源。默认值为None,这意味着工作进程将与池一样长寿。
上述内容引起了我的更多问题,而不是回答了我的问题。工作进程如果与池同样长寿会有什么问题?什么使工作进程“新鲜”,何时需要它?通常情况下,何时应明确设置maxtasksperchild的值而不是让它默认为“无限制”,以及考虑到任务数量对chunksize的影响,如何采取最佳做法以最大化处理速度?
从@Darkonaut对chunksize的惊人解答中,我现在了解chunksize的作用和代表什么。由于提供chunksize值会影响“任务”的数量,因此我想知道是否有任何应考虑它们之间的依赖关系以确保最大的性能?
谢谢!
multiprocessing.Pool
的 任何 池方法时,对象将立即被复制,因此您不会修改父进程中的对象,而是在工作进程中创建新对象。 - Darkonautpool.map()
中的iterable
中传递它,让指定的函数调用它的方法并让它返回该对象... - Darkonaut