使用日志输出终止Python多线程程序

时间:2018-09-01 22:03:19

标签: python python-2.7

问题

我目前有一个简单的 Python 多线程服务器程序,该程序可以永久运行,而无需人工中断。我想实现可以在某个时候优雅地终止它。一旦终止,我希望服务器输出一些统计信息。

我尝试过的解决方案

  1. 通过kill终止程序。问题是由于HARD终止,服务器无法输出统计信息。
  2. 在程序中创建一个控制线程,该线程监听按键输入。如果按了键,则终止程序并获取统计信息。这种方法的问题是我需要手动执行每个步骤。例如,SSH到设备,启动程序,然后在某个时候按键。

问题

有没有一种方法可以运行某些 bash /或其他程序,以根据统计信息输出正常停止该程序?

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用signal.signal()注册处理程序,例如SIGTERM?在那里,您可以实现这部分代码以丢弃统计信息,然后仅终止程序。

答案 1 :(得分:1)

标准方法是要么

  • 使线程的寿命足够短
  • 在停止信号处,停止产生新的,而.join()停止活动的。

  • 定期(例如在处理每个请求之后)使线程检查一些共享的停止标志,并在设置后退出
  • 在停止信号处,设置停止标志,然后.join()个线程

有些线程可以是.setDaemon(True)but only if they can be safely killed off(线程中没有异常或引发任何异常,只是在其所在位置停止了)。

If a thread is in a blocking call,可以通过关闭正在等待的功能(关闭套接字或流)来解除阻止。