我想学习多处理模块,我从互联网上找到了一些示例代码。 代码相同但结果不同。请帮忙 why my subprogram doesn't work ?
答案 0 :(得分:2)
我可以重现你的问题的唯一方法是,如果我将进程设置为daemonic:
p1 = Process(target=piao, args=('a',))
p2 = Process(target=piao, args=('b',))
p3 = Process(target=piao, args=('c',))
p1.daemon = True
p2.daemon = True
p3.daemon = True
p1.start()
p2.start()
p3.start()
daemon
线程将继续运行,而不会阻止主程序退出。在我的系统和Python(2.X)daemon
默认为False
。但根据3.X文档
如果提供,则仅关键字守护程序参数设置进程守护程序 标志为真或假。如果为None(默认值),则此标志为 继承自创建过程。
意味着您的Python Shell中有可能在没有明确规范的情况下以daemon
运行进程。
要更改此设置,请将标志设置为false:
p1.daemon = False
p2.daemon = False
p3.daemon = False
必须在调用start
之前完成,但是在Python 3.6的情况下可以在调用Process
对象的命令中完成(参见this)。
或使用join
:
p1.daemon = True
p2.daemon = True
p3.daemon = True
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
print "done"