python-3.x - Python多处理:如何限制等待进程的数量?(使用 Python 3.7 或更高版本。)
问题描述
引用安德烈·帕尼森9 年前提出的问题:
“当使用 Pool.apply_async 运行大量任务(带有大参数)时,进程被分配并进入等待状态,等待进程的数量没有限制。这可能会以吃掉所有内存而告终,如下例所示:"
import multiprocessing
import numpy as np
def f(a,b):
return np.linalg.solve(a,b)
def test():
p = multiprocessing.Pool()
for _ in range(1000):
p.apply_async(f, (np.random.rand(1000,1000),np.random.rand(1000)))
p.close()
p.join()
if __name__ == '__main__':
test()
“我正在寻找一种限制等待队列的方法,即只有有限数量的等待进程,并且 Pool.apply_async 在等待队列已满时被阻塞。”
但是建议的解决方案:
pool._taskqueue._maxsize = maxsize
pool._taskqueue._sem = BoundedSemaphore(maxsize)
在 Python 3.6 或更高版本中不再有效,因为 _taskqueue 没有属性 _maxsize。
还有办法限制等待进程的数量吗?还是我必须手动完成?
解决方案
推荐阅读
- r - 使用 mutate_at 对多个变量进行 Boxcox 变换
- python - 检查是否在python中启用了PIE
- sqlite - Ionic 3 本机 SQLite 插件未按预期工作
- python - 在 Flask 中使用 Response 对象时捕获异常不起作用
- html - 为什么 ahref 没有链接到某些网页
- firebase - 使用 Sinon 和 Mocha 存根 Firestore 事务
- javascript - 获取 00:00 格式的音频时间更新?
- r - 如何过滤列表列的元素
- node.js - NodeJs,处理用户投票的到期日期
- javascript - 如何实现 AngularJS 调色板颜色选择器?