使用日志输出终止Python多线程程序
问题 我目前有一个简单的Python多线程服务器程序,它将永远运行,不会出现手动中断。我想实现它可以在某个时刻优雅地终止。一旦终止,我希望服务器输出一些统计数据 我尝试过的解决方案使用日志输出终止Python多线程程序,python,python-2.7,Python,Python 2.7,问题 我目前有一个简单的Python多线程服务器程序,它将永远运行,不会出现手动中断。我想实现它可以在某个时刻优雅地终止。一旦终止,我希望服务器输出一些统计数据 我尝试过的解决方案 通过kill终止程序。问题是服务器无法输出统计数据,因为硬终止 在程序中创建一个监听键输入的控制线程。如果按下该键,则终止程序并获取统计信息。这种方法的问题是我需要手动完成每一步。例如,通过SSH连接到设备,启动程序,然后在某个点按键 问题 有没有一种方法可以让我运行一些bash/或其他程序,通过stats输出优雅地
kill
终止程序。问题是服务器无法输出统计数据,因为硬终止李>
有没有一种方法可以让我运行一些bash/或其他程序,通过stats输出优雅地停止该程序?您是否尝试过为例如
SIGTERM
注册处理程序?在那里,您可以实现抛出统计信息的这部分代码,然后终止该程序。您是否尝试使用它来注册处理程序,例如SIGTERM
?在那里,您可以实现抛出统计信息的这部分代码,然后终止程序。标准方法是
- 使线程足够短的寿命
- 在停止信号处,停止生成新的,并
激活的.join()
- 让线程定期(例如,在服务于每个请求之后)检查一些共享停止标志,并在设置时退出
- 在停止信号处,设置停止标志,然后
线程.join()
.setDaemon(True)
,(线程中没有异常或任何引发的内容,只是在它所在的位置停止)
,可以通过关闭它正在等待的设施(关闭套接字或流)来解除对它的阻止。标准方法是
- 使线程足够短的寿命
- 在停止信号处,停止生成新的,并
激活的.join()
- 让线程定期(例如,在服务于每个请求之后)检查一些共享停止标志,并在设置时退出
- 在停止信号处,设置停止标志,然后
线程.join()
.setDaemon(True)
,(线程中没有异常或任何引发的内容,只是在它所在的位置停止)
,可以通过关闭它正在等待的设施(关闭套接字或流)来解除对它的阻止。我不这么认为。我的观点是,我知道如何停止Python程序中所有正在运行的线程。我希望服务器被一些外部信号终止。否则,我将让服务器继续运行。在这种情况下,您可以从内部捕获外部信号,然后优雅地退出线程。无论哪种方式,为了顺利退出,您必须在线程本身中通过读取一些标志来实现退出功能。我的观点是,我知道如何停止Python程序中所有正在运行的线程。我希望服务器被一些外部信号终止。否则,我将让服务器继续运行。在这种情况下,您可以从内部捕获外部信号,然后优雅地退出线程。无论哪种方式,为了顺利退出,您必须通过读取一些标志在线程本身中实现退出功能。