首页 > 解决方案 > 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。

还有办法限制等待进程的数量吗?还是我必须手动完成?

标签: python-3.xmultiprocessingpython-multiprocessing

解决方案


推荐阅读