如果我开始这样的多个进程:
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个以上的工作,因此一旦一个过程完成,我想开始下一个过程。p>我知道pool.map
,但在这种情况下我无法使用它。
您没有比8更多的流程比8。使用multiprocessing.queue
安排工作。如果一个过程是空闲的,则从该队列中获取一些东西,然后对其进行处理,直到队列完成为止。您不必杀死流程,也不必再产生一个。
您还可以看一下ProcessPoolExecutor,如果我没记错的话,它是在多处理之上构建的,并提供了一种更简单的做事方式。
或者,检查具有" as_complet"方法的并发期货,该方法将在每个过程完成时产生结果,使您可以立即与这些值一起工作。