我正在编写一个程序来并行处理几个进程的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;。
我应该如何设计多处理代码,以便我可以实现预期的编排?
答案 0 :(得分:0)
如果您想要的是等待所有子进程在print("the end")
之前完成的主线程,那么您的代码是正确的,根据我上面发布的解释。如果在最后一行代码之前放置print len(multiprocessing.active_children())
,则会看到它等于0。