supervisor和Python多进程multiprocessing使用子进程残留问题

本文最后更新于:5 个月前

问题

使用supervisor管理Python程序时, 当Python程序中使用multiprocessing模块,supervisor的stop和restart指令只会杀死主进程,子进程会残留下来

解决

killasgroup可以说是专门适配了Python的multiprocessing模块,如果配置了stopasgroup=true,那么killasgroup也会默认为true,所以我们只需要配置stopasgroup=true即可,注意stopasgroup和killasgroup发送的信号类型不同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[group:telegram-monitor-py]
programs=multiprocesstest

# python 监控
[program:multiprocesstest]
command=/usr/bin/python38 monitor.py
directory=/www/wwwroot/telegram-py/src
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/etc/supervisord.d/log/telegram-monitor-py.out.log
stderr_logfile=/etc/supervisord.d/log/telegram-monitor-py.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=root
priority=999
numprocs=1
process_name=%(process_num)02d
stopsignal=QUIT
stopwaitsecs=3
stopasgroup=true