如何协调多处理过程?

时间:2014-12-05 10:35:59

标签: python multiprocessing python-multiprocessing

我正在编写一个程序来并行处理几个进程的multiprocessing.Queue。我越是深入研究编排部分,我就越不了解。

我想要实现的是启动多个流程,并确保在进一步完成之前完成所有流程。这听起来像是.join()的工作。

我最后测试了以下演示脚本(在Linux上运行):

import multiprocessing
import time

def myproc():
    print("hello from {proc}".format(proc=multiprocessing.current_process()))
    time.sleep(5)

allproc = []
for _ in range(3):
    p = multiprocessing.Process(target=myproc)
    allproc.append(p)
    p.start()

print("all processes started")

for p in allproc:
    print("joining {proc}".format(proc=p))
    p.join()

print("the end")

我期望将这个功能启动三次,立即打印"你好"消息然后睡觉。一旦所有这些都完成了睡眠,就会打印出最后的消息("结束")。

我真正得到的是:

hello from <Process(Process-1, started)>
hello from <Process(Process-2, started)>
all processes started
joining <Process(Process-1, started)>
hello from <Process(Process-3, started)>
joining <Process(Process-2, stopped)>
joining <Process(Process-3, stopped)>
the end

运行脚本时,它会在第3个&#34;你好&#34;之间等待。和第二个&#34;加入&#34;。

我应该如何设计多处理代码,以便我可以实现预期的编排?

1 个答案:

答案 0 :(得分:0)

如果您想要的是等待所有子进程在print("the end")之前完成的主线程,那么您的代码是正确的,根据我上面发布的解释。如果在最后一行代码之前放置print len(multiprocessing.active_children()),则会看到它等于0。