我在理解为什么deamon进程从不产生"启动/退出"输出时遇到问题。似乎在我调用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()
守护进程通常与stdin/stdout/stderr描述符断开连接,因为它们不需要与用户进行任何交互。所以,如果你想记录一些,我认为你需要给sys.stdout分配一些自定义流(也许是一些写入文件的记录器)
UPD:您可以使用连接到父进程的管道来测试代码。使用这个管道,您可以将消息传输到父进程,而不是STDOUT。