Umgang mit SIGTERM für ordnungsgemäßes Herunterfahren
Im Kontext realer Anwendungen ist es wichtig sicherzustellen, dass Prozesse Beendigungssignale ordnungsgemäß verarbeiten können um abrupte Unterbrechungen zu vermeiden. In Python ist die Handhabung von SIGTERM (TERM) eine häufige Anforderung bei der Verwaltung von Daemon-Prozessen.
Betrachten Sie den folgenden Beispiel-Daemon-Prozess:
def mainloop(): while True: # Important operations # ... # Sleep
Problem:
Wenn der Daemon-Prozess standardmäßig ein SIGTERM-Signal empfängt, wird der Ausführungsfluss sofort unterbrochen, was zur Beendigung des Prozesses führt, ohne laufende Vorgänge abzuschließen.
Frage:
Ist es möglich, SIGTERM ordnungsgemäß zu verarbeiten, ohne den aktuellen Ausführungsfluss zu unterbrechen? Das Ziel besteht darin, dem Prozess zu ermöglichen, den aktuellen Vorgang abzuschließen und dann ordnungsgemäß zu beenden, indem ein Shutdown-Flag in einem separaten Thread gesetzt wird.
Lösung:
Verwenden eine Graceful-Killer-Klasse:
Wir können eine einfache GracefulKiller-Klasse nutzen, um SIGTERM elegant zu verarbeiten:
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 dieser Lösung:
Das obige ist der detaillierte Inhalt vonKönnen Python-Prozesse SIGTERM ordnungsgemäß und ohne Unterbrechung verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!