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

使用日志输出终止Python多线程程序,python,python-2.7,Python,Python 2.7,问题 我目前有一个简单的Python多线程服务器程序,它将永远运行,不会出现手动中断。我想实现它可以在某个时刻优雅地终止。一旦终止,我希望服务器输出一些统计数据 我尝试过的解决方案 通过kill终止程序。问题是服务器无法输出统计数据,因为硬终止 在程序中创建一个监听键输入的控制线程。如果按下该键,则终止程序并获取统计信息。这种方法的问题是我需要手动完成每一步。例如,通过SSH连接到设备,启动程序,然后在某个点按键 问题 有没有一种方法可以让我运行一些bash/或其他程序,通过stats输出优雅地

问题

我目前有一个简单的Python多线程服务器程序,它将永远运行,不会出现手动中断。我想实现它可以在某个时刻优雅地终止。一旦终止,我希望服务器输出一些统计数据

我尝试过的解决方案

  • 通过
    kill
    终止程序。问题是服务器无法输出统计数据,因为硬终止
  • 在程序中创建一个监听键输入的控制线程。如果按下该键,则终止程序并获取统计信息。这种方法的问题是我需要手动完成每一步。例如,通过SSH连接到设备,启动程序,然后在某个点按键 问题


    有没有一种方法可以让我运行一些bash/或其他程序,通过stats输出优雅地停止该程序?

    您是否尝试过为例如
    SIGTERM
    注册处理程序?在那里,您可以实现抛出统计信息的这部分代码,然后终止该程序。

    您是否尝试使用它来注册处理程序,例如
    SIGTERM
    ?在那里,您可以实现抛出统计信息的这部分代码,然后终止程序。

    标准方法是

    • 使线程足够短的寿命
    • 在停止信号处,停止生成新的,并
      .join()
      激活的

    • 让线程定期(例如,在服务于每个请求之后)检查一些共享停止标志,并在设置时退出
    • 在停止信号处,设置停止标志,然后
      .join()
      线程
    有些线程可以是
    .setDaemon(True)
    ,(线程中没有异常或任何引发的内容,只是在它所在的位置停止)


    ,可以通过关闭它正在等待的设施(关闭套接字或流)来解除对它的阻止。

    标准方法是

    • 使线程足够短的寿命
    • 在停止信号处,停止生成新的,并
      .join()
      激活的

    • 让线程定期(例如,在服务于每个请求之后)检查一些共享停止标志,并在设置时退出
    • 在停止信号处,设置停止标志,然后
      .join()
      线程
    有些线程可以是
    .setDaemon(True)
    ,(线程中没有异常或任何引发的内容,只是在它所在的位置停止)


    ,可以通过关闭它正在等待的设施(关闭套接字或流)来解除对它的阻止。

    我不这么认为。我的观点是,我知道如何停止Python程序中所有正在运行的线程。我希望服务器被一些外部信号终止。否则,我将让服务器继续运行。在这种情况下,您可以从内部捕获外部信号,然后优雅地退出线程。无论哪种方式,为了顺利退出,您必须在线程本身中通过读取一些标志来实现退出功能。我的观点是,我知道如何停止Python程序中所有正在运行的线程。我希望服务器被一些外部信号终止。否则,我将让服务器继续运行。在这种情况下,您可以从内部捕获外部信号,然后优雅地退出线程。无论哪种方式,为了顺利退出,您必须通过读取一些标志在线程本身中实现退出功能。