使用主管优雅地结束 Python 程序

Sid*_*pta 5 python supervisord

我正在编写一个我将使用主管运行的 python 程序。该程序主要执行以下操作:

if __name__ == "__main__":
    while True:
        run()
Run Code Online (Sandbox Code Playgroud)

其中 run 函数执行一个简单的任务,即从数据库 ( mysqlDB)中获取某些内容并将其发送到电子邮件中。

我想编写程序,以便当我使用

supervisorctl stop program

mysql 连接应该关闭,并完成一个适当的关闭日志。

有什么办法可以在我的 python 脚本中处理停止命令。

Eri*_*c G 0

您可以使用信号单元从操作系统接收信号,这就是管理程序要做的事情。下面的示例代码未经测试。完全没有。

import signal

keep_going = True

def my_shutdown_handler(signum, frame):
    # set a flag to exit your loop or call what you need to exit gracefully
    keep_going = False

if __name__ == "__main__":
    signal.signal(signal.SIGTERM, my_shutdown_handler) 
    while keep_going:
        run()
Run Code Online (Sandbox Code Playgroud)

在这里查看更多、更清晰的示例:

如何优雅地处理SIGTERM信号?