python - Python 多处理池:maxtasksperchild
问题描述
我一直在涉足 Python 的多处理库,虽然它提供了一个非常易于使用的 API,但它的文档并不总是很清楚。特别是,传递给 Pool 类实例的参数“maxtasksperchild”让我感到非常困惑。
以下内容直接来自 Python 的文档(3.7.2):
maxtasksperchild是工作进程在退出并被新的工作进程替换之前可以完成的任务数,以释放未使用的资源。默认的 maxtasksperchild 是 None,这意味着工作进程将与池一样长。
以上对我提出的问题比它回答的要多。工作进程与池一样长是不是很糟糕?是什么让工作进程“新鲜”?什么时候需要?一般来说,什么时候应该明确设置 maxtasksperchild 的值,而不是让它默认为“无”,为了最大限度地提高处理速度,什么被认为是最佳实践?
从@Darkonaut 对 chunksize 的惊人回答,我现在了解了 chunksize 的作用和代表。由于为 chunksize 提供值会影响“任务”的数量,我想知道是否应该考虑它们的依赖性以确保最大性能?
谢谢!
解决方案
通常你不需要触摸它。例如,有时可能会出现在 Python 外部调用代码泄漏内存的问题。限制工作进程在被替换之前执行的任务数量会有所帮助,因为当进程被废弃时,他错误地积累的“未使用资源”会被释放。开始一个新的、“新鲜的”过程,然后保持问题得到控制。maxtasksperchild
因为替换一个进程需要时间,所以默认情况下你会得到性能。当你有一天遇到无法解释的资源问题时,你可以尝试设置maxtasksperchild=1
看看这是否会改变一些东西。如果是这样,很可能是某些东西正在泄漏。
推荐阅读
- r - 如何很好地绘制置换矩阵
- css - 如何将css链接到节点中的ejs模板
- javascript - 模型未保存到 MongoDB
- javascript - curry 函数中使用 null 调用的目的(JavaScript 实现)
- node.js - 使用 multer 上传文件
- javascript - 无论是否附加了 Chrome 调试器,日期构造函数的工作方式都不同
- javascript - Object.keys - 期望一个赋值或函数调用,而是看到一个表达式 no-unused-expressions
- python - 用numpy数组中第一个出现的非零值替换所有零值
- python - 根据内容在word中添加文本
- python - [for 'elem' in myList] 与 [for 'i' in range(x, y)] 的区别是什么,引用列表元素