为什么我的程序在使用多处理模块

时间:2017-09-26 01:24:06

标签: python python-3.x

我想学习多处理模块,我从互联网上找到了一些示例代码。 代码相同但结果不同。请帮忙 why my subprogram doesn't work ?

1 个答案:

答案 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"