Changelog
Verbesserte Handhabung von KeyboardInterrupt
und sauberer Shutdown
Datum: 19.10.2024
Datei: checkpoint.py
Änderungen:
-
Abfangen von
KeyboardInterrupt
in dermain()
-Funktion:-
Was wurde geändert?
- Ein
try...except
-Block wurde um den Hauptteil dermain()
-Funktion hinzugefügt, umKeyboardInterrupt
abzufangen. - Beim Erhalt eines
KeyboardInterrupt
werden alle laufenden asynchronen Tasks (consume_messages
,consume_unban_messages
, etc.) ordnungsgemäß abgebrochen. - Die Funktion
asyncio.gather()
wird mit dem Parameterreturn_exceptions=True
aufgerufen, um sicherzustellen, dass alle Tasks korrekt beendet werden, auch wenn sie Ausnahmen auslösen.
- Ein
-
Warum wurde dies geändert?
- Um sicherzustellen, dass das Programm bei einem manuellen Abbruch durch den Benutzer (z.B. durch Drücken von
Ctrl+C
) die laufenden Prozesse sauber beendet und Ressourcen wie Verbindungen zu RabbitMQ ordnungsgemäß freigibt. - Verhindert unerwartete Ausnahmen und Fehlermeldungen während des Shutdowns.
- Um sicherzustellen, dass das Programm bei einem manuellen Abbruch durch den Benutzer (z.B. durch Drücken von
-
-
Anpassung der Verbraucherfunktionen (
consume_*
), umasyncio.CancelledError
abzufangen:-
Was wurde geändert?
- In jeder der
consume_*
-Funktionen (consume_messages
,consume_unban_messages
,consume_tempban_messages
,consume_watchlist_messages
,consume_unwatch_messages
) wurde eintry...except
-Block hinzugefügt. - Dieser fängt
asyncio.CancelledError
ab, das ausgelöst wird, wenn der Task abgebrochen wird. - Zusätzlich wird ein allgemeiner
except
-Block hinzugefügt, um andere unerwartete Ausnahmen zu protokollieren.
- In jeder der
-
Warum wurde dies geändert?
- Durch das Abfangen von
asyncio.CancelledError
kann jeder Task sauber beendet werden, ohne dass unhandhabte Ausnahmen auftreten. - Verbessert die Stabilität des Programms und ermöglicht einen kontrollierten Shutdown der einzelnen Aufgaben.
- Durch das Abfangen von
-
-
Hinzufügen von Logging-Meldungen:
-
Was wurde geändert?
- Zusätzliche Logging-Meldungen wurden hinzugefügt, um den Status des Programms besser zu verfolgen.
- Beim Start und Abbruch jeder Verbraucherfunktion wird nun eine entsprechende Meldung protokolliert (z.B. "Task consume_messages wurde abgebrochen.").
- Beim Schließen der Verbindungen in der
finally
-Klausel dermain()
-Funktion wird eine Meldung ausgegeben ("Schließe Verbindungen...").
-
Warum wurde dies geändert?
- Erhöht die Transparenz des Programmablaufs und erleichtert das Debugging.
- Gibt dem Benutzer Feedback darüber, was beim Beenden des Programms passiert.
-
-
Anpassung des Hauptprogramms (
if __name__ == '__main__'
):-
Was wurde geändert?
- Ein zusätzlicher
try...except
-Block wurde um den Aufruf vonasyncio.run(main())
hinzugefügt. - Dieser fängt
KeyboardInterrupt
ab, falls es außerhalb dermain()
-Funktion auftritt. - Beim Abfangen wird eine Logging-Meldung ausgegeben ("Programm wurde durch KeyboardInterrupt beendet.").
- Ein zusätzlicher
-
Warum wurde dies geändert?
- Um sicherzustellen, dass das gesamte Programm sauber beendet wird, selbst wenn ein
KeyboardInterrupt
außerhalb dermain()
-Funktion auftritt. - Verhindert unhandhabte Ausnahmen und ermöglicht einen kontrollierten Shutdown.
- Um sicherzustellen, dass das gesamte Programm sauber beendet wird, selbst wenn ein
-
Zusammenfassung der Vorteile:
- Sauberer Shutdown des Programms: Durch das ordnungsgemäße Abfangen von Unterbrechungssignalen und das kontrollierte Beenden von Tasks und Verbindungen wird sichergestellt, dass keine Ressourcen offengelassen oder beschädigt werden.
- Verbesserte Fehlerbehandlung: Unerwartete Ausnahmen werden abgefangen und protokolliert, was die Stabilität des Programms erhöht und das Debugging erleichtert.
- Erhöhte Transparenz: Durch detaillierte Logging-Meldungen kann der Programmablauf besser nachvollzogen werden.