我喜欢同时运行一堆进程,但从不想重用已经存在的进程,所以,基本上,一旦一个进程完成,我喜欢创建一个新的进程,但在任何时候,进程的数量都不应该超过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)
1条答案
按热度按时间hmae6n7t1#
池可以重用进程的次数有限,包括仅在传递
maxtasksperchild=1
时才重用一次。您还可以尝试initializer
,看看是否可以在库中而不是在池作业中对每个进程部分运行一次picky。