Python 为什么我的程序没有';当我使用多处理模块时无法工作

Python 为什么我的程序没有';当我使用多处理模块时无法工作,python,python-3.x,Python,Python 3.x,我试图学习多处理模块,并从互联网上找到了一些示例代码。 代码相同,但结果不同。请帮忙 重现问题的唯一方法是将进程设置为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()

我试图学习多处理模块,并从互联网上找到了一些示例代码。 代码相同,但结果不同。请帮忙

重现问题的唯一方法是将进程设置为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()
守护进程
线程将继续运行,而不会阻止主程序退出。在我的系统和Python(2.X)上,
守护进程
默认为
False
。但是根据3.X文档

如果提供了关键字only daemon参数,则设置进程守护进程 标记为真或假。如果无(默认设置),则将显示此标志 继承自创建过程

这意味着在Windows上的pythonshell中有可能在没有明确规范的情况下作为
守护进程运行进程

要更改此设置,请将标志设置为false:

p1.daemon = False
p2.daemon = False
p3.daemon = False
这必须在调用
start
之前完成,但在Python 3.6中,可以在调用
进程
对象的命令中完成(请参阅)

或者使用
加入

p1.daemon = True
p2.daemon = True
p3.daemon = True

p1.start()
p2.start()
p3.start()

p1.join()
p2.join()
p3.join()

print "done"

@atru可能是因为我没有掌握最新的Python,但执行会等待所有线程完成,然后为我终止进程。。。它确实在开始消息的中间打印结束消息,但是它等待所有的结束。messages@HyperNeutrino是的,它不是
join()
。我删除了我的评论。不过,这个程序对我来说是有效的-在开始时打印结束消息。@atru很好,它是
join()
。。。这只是等待线程完成并终止它,这使得结束消息在end@HyperNeutrino可能是
print
功能中的
flush=False
?我无法检查,因为我没有Python3.X。。。我在一个使用C语言的MPI集群上遇到了这个问题(在运行结束之前没有输出,一点也没有)。@HyperNeutrino我在线程和MPI方面有相当的经验;)这是一个快速的回答,部分是为了回应用户缺乏代码(代码不是图像);美好的我赞成详细解释;)@超中微子谢谢!:)在我放弃后,我突然想到:)