Skip to content

3.3.1

Latest
Compare
Choose a tag to compare
@bumseb1ene bumseb1ene released this 19 Oct 19:13
· 1 commit to main since this release

Changelog

Verbesserte Handhabung von KeyboardInterrupt und sauberer Shutdown

Datum: 19.10.2024

Datei: checkpoint.py

Änderungen:

  1. Abfangen von KeyboardInterrupt in der main()-Funktion:

    • Was wurde geändert?

      • Ein try...except-Block wurde um den Hauptteil der main()-Funktion hinzugefügt, um KeyboardInterrupt 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 Parameter return_exceptions=True aufgerufen, um sicherzustellen, dass alle Tasks korrekt beendet werden, auch wenn sie Ausnahmen auslösen.
    • 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.
  2. Anpassung der Verbraucherfunktionen (consume_*), um asyncio.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 ein try...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.
    • 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.
  3. 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 der main()-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.
  4. Anpassung des Hauptprogramms (if __name__ == '__main__'):

    • Was wurde geändert?

      • Ein zusätzlicher try...except-Block wurde um den Aufruf von asyncio.run(main()) hinzugefügt.
      • Dieser fängt KeyboardInterrupt ab, falls es außerhalb der main()-Funktion auftritt.
      • Beim Abfangen wird eine Logging-Meldung ausgegeben ("Programm wurde durch KeyboardInterrupt beendet.").
    • Warum wurde dies geändert?

      • Um sicherzustellen, dass das gesamte Programm sauber beendet wird, selbst wenn ein KeyboardInterrupt außerhalb der main()-Funktion auftritt.
      • Verhindert unhandhabte Ausnahmen und ermöglicht einen kontrollierten Shutdown.

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.