答案可能就在我面前的链接上,但我仍然不明白.我确定在有人向我解释之后,达尔文会打电话给我.
这个例子是at this link here,虽然我做了一些改变,试图尝试并帮助我理解.
这是代码:
import multiprocessing
import time
import sys
def daemon():
p = multiprocessing.current_process()
print 'Starting: ', p.name, p.pid
sys.stdout.flush()
time.sleep(2)
print 'Exiting: ', p.name, p.pid
sys.stdout.flush()
def non_daemon():
p = multiprocessing.current_process()
print 'Starting: ', p.name, p.pid
sys.stdout.flush()
time.sleep(6)
print 'Exiting: ', p.name, p.pid
sys.stdout.flush()
if __name__ == '__main__':
d = multiprocessing.Process(name='daemon', target=daemon)
d.daemon = True
n = multiprocessing.Process(name='non-daemon', target=non_daemon)
n.daemon = False
d.start()
time.sleep(1)
n.start()
# d.join()
并且代码的输出是:
Starting: daemon 6173
Starting: non-daemon 6174
Exiting: non-daemon 6174
如果取消注释末尾的join(),则输出为:
Starting: daemon 6247
Starting: non-daemon 6248
Exiting: daemon 6247
Exiting: non-daemon 6248
我很困惑b / c守护进程的睡眠是2秒,而非守护进程是6秒.为什么不在第一种情况下打印出“退出”消息?守护进程应该在非守护进程之前唤醒并打印消息.
该网站的解释如下:
The output does not include the “Exiting” message from the daemon
process, since all of the non-daemon processes (including the main
program) exit before the daemon process wakes up from its 2 second
sleep.
但我改变了它,以至于守护进程应该在非守护进程之前唤醒.我在这里错过了什么?在此先感谢您的帮助.
编辑:忘了提到我正在使用python 2.7但显然这个问题也在python 3.x中