Heim >Backend-Entwicklung >Python-Tutorial >Wie verarbeitet man SIGTERM-Signale in Python-Daemons ordnungsgemäß?
Bei dämonischen Vorgängen kann das Beenden eines Prozesses mithilfe des SIGTERM-Signals (TERM) kritische Aufgaben abrupt unterbrechen. Um dieses Problem anzugehen, wollen wir untersuchen, wie man dieses Signal elegant handhaben kann.
Gegeben sei ein einfacher Daemon, der in Python geschrieben wurde:
def mainloop(): while True: # Perform important jobs # Sleep
Dämonisierung mit Start-Stopp -daemon sendet bei Beendigung SIGTERM (TERM). Wenn das Signal während eines kritischen Vorgangs empfangen wird (z. B. Schritt #2), wird es sofort beendet.
Versuche, das Signalereignis mit signal.signal( zu verarbeiten signal.SIGTERM, Handler) kann auch die aktuelle Ausführung unterbrechen und die Kontrolle an den Handler umleiten.
Um eine Unterbrechung der aktuellen Ausführung zu vermeiden, können wir einen separaten Thread erstellen, um das TERM-Signal zu verarbeiten. Dieser Thread kann „shutdown_flag = True“ setzen, wodurch die Hauptschleife ordnungsgemäß beendet werden kann.
Hier ist eine klassenbasierte Lösung für eine ordnungsgemäße Signalverarbeitung:
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("doing something in a loop ...") print("End of the program. I was killed gracefully :)")
Diese Lösung ermöglicht es dem Daemon, SIGTERM ordnungsgemäß zu verarbeiten und sicherzustellen, dass kritische Vorgänge vor der Beendigung abgeschlossen werden können. Es bietet außerdem eine saubere und wartbare Implementierung für die Verarbeitung von Signalen in Multithread-Umgebungen.
Das obige ist der detaillierte Inhalt vonWie verarbeitet man SIGTERM-Signale in Python-Daemons ordnungsgemäß?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!