Home >Backend Development >Python Tutorial >Can Python Processes Handle SIGTERM Gracefully Without Interruption?
Handling SIGTERM for Graceful Shutdown
In the context of real-world applications, it is essential to ensure that processes can handle termination signals gracefully to prevent abrupt interruptions. In Python, the handling of SIGTERM (TERM) is a common requirement when managing daemon processes.
Consider the following example Daemon process:
def mainloop(): while True: # Important operations # ... # Sleep
Problem:
When the Daemon process receives a SIGTERM signal by default, the execution flow is interrupted immediately, leading to the termination of the process without completing ongoing operations.
Question:
Is it possible to handle SIGTERM gracefully without interrupting the current execution flow? The goal is to allow the process to finish the current operation and then exit gracefully by setting a shutdown flag within a separate thread.
Solution:
Using a Graceful Killer Class:
We can leverage a simple GracefulKiller class to handle SIGTERM gracefully:
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.")
In this solution:
The above is the detailed content of Can Python Processes Handle SIGTERM Gracefully Without Interruption?. For more information, please follow other related articles on the PHP Chinese website!