我通过 gunicorn 使用单个工人运行应用程序。
所以,我有主进程(比如说,id=12)。我也可以使用多处理(id = 20,无论如何)从主创建另一个进程。
我还想提供中断子进程的可能性(id=20)。为此,从主进程调用 os.kill(20, signal.SIGTERM)
。此外,还提供了 SIGTERM
信号的自定义处理程序。
问题是,如果应用程序捕捉到信号,进程 (id=20) 会按我的预期停止,但主进程也会在此之后停止。然后工作人员重新启动。
文档 (https://docs.gunicorn.org/en/latest/signals.html#master-process) 很差,或者我遗漏了什么。
我玩了一段时间后意识到我可以通过 SIGUSR1
或 SIGUSR2
停止子进程而无需重新启动工作程序(当然,如果我的自定义方法提供了此信号)。>
但我不确定,这是停止进程的正确方法。或者也许我可以用 SIGTERM
做同样的事情。
谢谢。