asyncio-Abbruch: Aufräumen durchführen, ohne CancelledError zu verschlucken
Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original
Den Abbruch für die aufgabenbesitzende Stelle sichtbar halten und dabei auf dem unterbrochenen Pfad Ressourcen freigeben.
Inhalt
Worum es geht
Pythons asyncio-Dokumentation empfiehlt try/finally für das Aufräumen und generell die Weitergabe von CancelledError nach expliziter Behandlung. Sie warnt, dass TaskGroup- und Timeout-Mechanismen Abbruch intern nutzen und sich falsch verhalten können, wenn eine Coroutine ihn verschluckt. Abbruch ist deshalb Teil des Aufgabenvertrags, nicht bloss ein weiterer Fehler, der in ein gewöhnliches Ergebnis verwandelt wird. Python asyncio tasks
Warum es wichtig ist
Ein Agent kann einen breiten Recovery-Zweig hinzufügen, um einen Worker am Laufen zu halten, und dabei versehentlich verhindern, dass dessen besitzende Stelle ihn stoppen kann. Ein erwarteter Operationsfehler von einer Anfrage zur Beendigung der Aufgabe trennen. Die vorgeschlagene Prüfung verfolgt den Abbruch von der übergeordneten Anfrage über das Aufräumen bis zum für die aufrufende Stelle sichtbaren Ergebnis.
So wird es angewendet
- Jeden Exception-Handler um erwartete Arbeit herum finden und feststellen, welcher davon den Abbruch behandelt. Festhalten, ob die Coroutine ihn weitergibt, umwandelt oder absichtlich unterdrückt.
- Die Ressourcenfreigabe in einen finally-Block oder einen passenden asynchronen Kontextmanager legen. Das Aufräumen fokussiert halten und festlegen, was geschieht, wenn das Aufräumen selbst fehlschlägt oder abgebrochen wird.
- Wird CancelledError ausdrücklich abgefangen, um zusätzliche Arbeit zu verrichten, ihn danach normalerweise erneut auslösen. Unterdrückung als bewusste Designentscheidung behandeln, die ein dokumentiertes Protokoll auf Ebene der besitzenden Stelle erfordert.
- Testfälle vorschlagen, die vor der Beschaffung, während einer erwarteten Operation und nach teilweisem Fortschritt abbrechen. Den Ressourcenzustand und das Endergebnis der Aufgabe prüfen, statt nur festzustellen, dass eine Protokollzeile erschienen ist.
- Die Coroutine innerhalb ihrer echten TaskGroup oder ihres Timeout-Kontexts testen, damit Wechselwirkungen mit dem übergeordneten Geltungsbereich sichtbar werden.
Stolpersteine
Abbruch macht bereits festgeschriebene externe Nebeneffekte nicht rückgängig. Aufräumen macht eine Wiederholung auch nicht automatisch sicher. Shielding oder das Manipulieren des Abbruchzustands nicht einfach verwenden, um ein unbequemes Timeout zu verbergen; für eine bewusste Unterdrückung den Vertrag der genauen asyncio-Version konsultieren. Für diesen Artikel wurde kein Abbruchtest ausgeführt, und die Methode verspricht keine sofortige Beendigung beliebigen blockierenden Codes.
Geltungsbereich und Grundlage
Original synthesis from the cited primary documentation, with proposed diagnostic and verification steps. No benchmark, experiment or field result is claimed; unreviewed AI-assisted contribution.
Wissensstand: 2026-09-22. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.
Quellen
- Python asyncio tasks — geprüft am 2026-09-23: erreichbar, Zitat gefunden
Zuschreibung und Lizenz
- Account External coding curation authors (57eb56c9)
- Written with Codex, an AI coding agent, at the site operator's request; original synthesis, sources credited separately.
Letzte Änderung: New English original; AI-assisted and unreviewed. Proposed checks have not been executed for this article.
Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.