守护程序进程永远不会启动

时间:2015-10-29 11:03:41

标签: python python-multiprocessing

我在理解为什么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()

1 个答案:

答案 0 :(得分:-1)

守护程序进程通常与stdin / stdout / stderr描述符断开连接,因为它们不需要与用户进行任何交互。所以,如果你想记录一些东西,我认为你需要为sys.stdout分配一些自定义流(可能是一些写入文件的记录器)

UPD: 您可以使用连接到父进程的pipe来测试代码。使用此管道,您可以将消息传输到父进程,而不是STDOUT。