supervisor stop父进程的同时, 也stop掉子进程

用python的multiprocessing模块把服务改成多进程后, 遇到几个问题:

  1. 数据库连接失败, 总是在服务运行几十秒后, 卡主, 然后报错数据库连接失败
    InterfaceError: (0, '')
    检查后发现, 是把数据库连接的操作放到while循环中了, 创建了大量的连接导致的

  2. 服务是用supervisor工具来启动的, 当用stop停掉这个含子进程的 服务时, 用ps查看, 发现只kill掉了父进程, 但是子进程仍然在后台跑着

  • 首先,怀疑是不是守护进程的问题, 查看multiprocessing模块, p.daemon默认是False, 也就表示, 默认不是守护进程

  • 这里解释一下守护进程, 如果一个子进程设置为守护进程, 那么当父进程结束时, 子进程不会随父进程退出, 守护进程也被称为精灵进程

  • 回到问题, 这里默认就设置了 daemon=False, 所以也不是这个问题导致

  • 然后又发现, 用ctrl+C 结束进程, 就不会出现这种情况, 所以, 问题就指向了supervisor

解决方法:
  • 在supervisor的配置中(是指当前服务的配置), 添加两条
    killasgroup=true
    stopasgroup=true
    然后别忘了在supervisorctl的控制台中, update一下

你可能感兴趣的:(supervisor stop父进程的同时, 也stop掉子进程)