Python 3:当另一个进程完成时创建新进程

Python 3: create new process when another one finishes

我有一组数据要处理,处理程序执行时间长(1-2 分钟)并且计算需要大量内存。

raw = ['a', 'b', 'c']

def handler():
    # do something long

由于handler需要大量内存,所以我想在单独的子进程中执行它,执行完后kill它以释放内存。类似于以下代码段:

from multiprocessing import Process
for r in raw:
    process = Process(target=handler, args=(r))
    process.start()

问题是这种方法会导致立即 运行ning len(raw) 进程。这不好。 此外,不需要在子进程之间交换任何类型的数据。结果就是 运行 他们。 因此,最好同时 运行 几个进程,并在现有进程完成后添加一个新进程。

如何实施(如果可能的话)?

按顺序 运行 您的进程,只是 join 循环中的每个进程:

from multiprocessing import Process
for r in raw:
    process = Process(target=handler, args=(r))
    process.start()
    process.join()

这样你就可以确定只有一个进程在同一时间 运行ning(无并发)

这是最简单的方法。要运行多个进程但同时限制进程数运行ning,可以使用一个multiprocessing.Pool对象和apply_async

我构建了一个计算参数平方并模拟繁重处理的简单示例:

from multiprocessing import Pool
import time

def target(r):
    time.sleep(5)
    return(r*r)
raw = [1,2,3,4,5]

if __name__ == '__main__':
    with Pool(3) as p:  # 3 processes at a time
        reslist = [p.apply_async(target, (r,)) for r in raw]
        for result in reslist:
            print(result.get())

运行 我得到:

<5 seconds wait, time to compute the results>
1
4
9
<5 seconds wait, 3 processes max can run at the same time>
16
25