我在理解为什么deamon进程永远不会产生“Starting / Exiting”输出时遇到问题。在我调用n.start()
的那一刻,这个过程似乎已经被杀死了import multiprocessing
import time
import sys
def daemon():
p = multiprocessing.current_process()
print 'Starting:', p.name, p.pid
sys.stdout.flush()
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(3)
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()
n.start()
答案 0 :(得分:-1)
守护程序进程通常与stdin / stdout / stderr描述符断开连接,因为它们不需要与用户进行任何交互。所以,如果你想记录一些东西,我认为你需要为sys.stdout分配一些自定义流(可能是一些写入文件的记录器)
UPD: 您可以使用连接到父进程的pipe来测试代码。使用此管道,您可以将消息传输到父进程,而不是STDOUT。