python-3.x 运行N个进程,但从不重用同一进程

c2e8gylq  于 2022-12-27  发布在  Python
关注(0)|答案(1)|浏览(110)

我喜欢同时运行一堆进程,但从不想重用已经存在的进程,所以,基本上,一旦一个进程完成,我喜欢创建一个新的进程,但在任何时候,进程的数量都不应该超过N。
我不认为我可以为此使用多处理池,因为它重用进程。
我怎样才能做到这一点?
一种解决方案是运行N个进程,等待所有进程完成。然后重复相同的操作,直到所有任务完成。这种解决方案不是很好,因为每个进程可能有非常不同的运行时间。
下面是一个看起来很有效的简单解决方案:

from multiprocessing import Process, Queue
import random
import os
from time import sleep

def f(q):
    print(f"{os.getpid()} Starting")
    sleep(random.choice(range(1, 10)))
    q.put("Done")

def create_proc(q):
    p = Process(target=f, args=(q,))
    p.start()

if __name__ == "__main__":
    q = Queue()

    N = 5
    for n in range(N):
        create_proc(q)

    while True:
        q.get()
        create_proc(q)
hmae6n7t

hmae6n7t1#

池可以重用进程的次数有限,包括仅在传递maxtasksperchild=1时才重用一次。您还可以尝试initializer,看看是否可以在库中而不是在池作业中对每个进程部分运行一次picky。

相关问题