【发布时间】:2016-03-24 00:57:15
【问题描述】:
下面的链接中的答案可能就在我面前,但我还是不明白。我相信在有人向我解释后,达尔文会打电话给我。
这个例子是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 秒。为什么它在第一种情况下不打印“退出”消息?守护进程应该在非守护进程之前唤醒并打印消息。
网站的解释是这样的:
输出不包括来自守护进程的“Exiting”消息 进程,因为所有非守护进程(包括主 程序)在守护进程从 2 秒唤醒之前退出 睡觉。
但我将其更改为守护程序应该在非守护程序之前唤醒。我在这里想念什么?提前感谢您的帮助。
编辑:忘了提到我正在使用 python 2.7,但显然这个问题也在 python 3.x 中
【问题讨论】:
标签: python python-2.7 python-3.x multiprocessing daemon