正常なシャットダウンのための SIGTERM の処理
実際のアプリケーションのコンテキストでは、プロセスが終了信号を正常に処理できることを確認することが重要です突然の中断を防ぐため。 Python では、SIGTERM (TERM) の処理は、デーモン プロセスを管理する際の一般的な要件です。
次のデーモン プロセスの例を考えてみましょう:
def mainloop(): while True: # Important operations # ... # Sleep
問題:
デーモン プロセスがデフォルトで SIGTERM シグナルを受信すると、実行フローは直ちに中断され、進行中の操作を完了することなくプロセスが終了します。
質問:
現在の実行フローを中断せずに SIGTERM を適切に処理することは可能ですか?目標は、プロセスが現在の操作を終了し、別のスレッド内でシャットダウン フラグを設定することで正常に終了できるようにすることです。
解決策:
使用Graceful Killer クラス:
単純な GracefulKiller クラスを活用して SIGTERM を適切に処理できます:
import signal import time class GracefulKiller: kill_now = False def __init__(self): signal.signal(signal.SIGINT, self.exit_gracefully) signal.signal(signal.SIGTERM, self.exit_gracefully) def exit_gracefully(self, signum, frame): self.kill_now = True if __name__ == '__main__': killer = GracefulKiller() while not killer.kill_now: time.sleep(1) print("Performing operation...") print("Process exited gracefully.")
このソリューションでは:
以上がPython プロセスは SIGTERM を中断せずに正常に処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。