开始新流程而无需等待所有其他流程完成

时间:2019-07-04 13:21:47

标签: python multiprocessing

如果我这样启动多个进程:

        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,但是在这种情况下我不能使用它。

2 个答案:

答案 0 :(得分:1)

您的进程数不超过8。您的“工作项/任务”多于8。使用multiprocessing.queue安排工作。如果进程空闲,请从此队列中获取内容并对其进行处理,直到队列完成。您不必杀死进程并生成另一个进程。

答案 1 :(得分:1)

您还可以看看ProcessPoolExecutor,如果我没记错的话,它是建立在多处理之上的,并且提供了一种更简单的处理方式。

或者,选中concurrent futures,该方法具有“ as_completed”方法,该方法将在每个过程完成时产生结果,使您可以立即使用这些值。