如果我这样启动多个进程:
procs = []
for agent_id in agents:
proc = Process(target=beginmultiproc, args=(id))
procs.append(proc)
proc.start()
# wait for processes to finish
for proc in procs:
proc.join()
有没有一种方法可以在一个新过程完成后立即开始,而不必等待所有过程完成?我想一次运行8个进程,因为那是我的CPU拥有多少个内核,但是我需要运行8个以上的作业,因此一旦一个进程完成,我就想开始运行下一个进程。>
我知道pool.map
,但是在这种情况下我不能使用它。
答案 0 :(得分:1)
您的进程数不超过8。您的“工作项/任务”多于8。使用multiprocessing.queue
安排工作。如果进程空闲,请从此队列中获取内容并对其进行处理,直到队列完成。您不必杀死进程并生成另一个进程。
答案 1 :(得分:1)
您还可以看看ProcessPoolExecutor,如果我没记错的话,它是建立在多处理之上的,并且提供了一种更简单的处理方式。
或者,选中concurrent futures,该方法具有“ as_completed”方法,该方法将在每个过程完成时产生结果,使您可以立即使用这些值。