美文网首页
python multiprocessing daemon失效的

python multiprocessing daemon失效的

作者: 云石畅想 | 来源:发表于2016-12-17 18:42 被阅读0次

    今天写个常驻服务,使用了multiprocessing库,新的process设置了daemon属性,想通过signal来主动关闭服务,主进程进行了信号绑定,代码如下:

    def handler(signum, frame):
       logger.info("got signal:%d" % signum)
       global quit
       quit = True
    
    signal.signal(signal.SIGINT, handler)
    signal.signal(signal.SIGTERM, handler)
    

    这样设置后,发现Ctrl+C后,父子进程均收到了信号,但是子进程并没有终止,父进程也hang住了。

    查看日志,发现在子进程收到signum为2(signal.SIGINT)的信号后,又收到了15(signal.SIGTERM),这说明daemon属性设置是为了父进程往子进程发送15的信号,但是如果15也被主动捕获了,导致默认处理15的退出逻辑并没有再执行,而父进程没有收到子进程的退出状态,也hang住了,将15的捕获删除后,符合预期。

    相关文章

      网友评论

          本文标题:python multiprocessing daemon失效的

          本文链接:https://www.haomeiwen.com/subject/mxxamttx.html