Maison >développement back-end >Tutoriel Python >Les processus Python peuvent-ils gérer SIGTERM avec élégance sans interruption ?
Gestion de SIGTERM pour un arrêt progressif
Dans le contexte des applications du monde réel, il est essentiel de s'assurer que les processus peuvent gérer les signaux de terminaison avec élégance pour éviter des interruptions brusques. En Python, la gestion de SIGTERM (TERM) est une exigence courante lors de la gestion des processus démons.
Considérez l'exemple de processus démon suivant :
def mainloop(): while True: # Important operations # ... # Sleep
Problème :
Lorsque le processus Daemon reçoit un signal SIGTERM par défaut, le flux d'exécution est immédiatement interrompu, entraînant la fin du processus sans terminer les opérations en cours.
Question :
Est-il possible de gérer SIGTERM avec élégance sans interrompre le flux d'exécution actuel ? L'objectif est de permettre au processus de terminer l'opération en cours, puis de se terminer correctement en définissant un indicateur d'arrêt dans un thread séparé.
Solution :
Utilisation une classe Graceful Killer :
Nous pouvons exploiter une simple classe GracefulKiller pour gérer SIGTERM avec élégance :
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.")
Dans cette solution :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!