Watch out for this (async) generator cleanup pitfall in Python
3-Second Blueprint (English)
- Leaving a Python generator unexhausted defers its internal with or finally cleanup until garbage collection runs.
- Because garbage collection is synchronous, collecting an async generator only schedules aclose without awaiting it.
- Wrapping loops in contextlib.closing or async with contextlib.aclosing guarantees deterministic resource teardown.
Python async generatorscontextlib.aclosingcontextlib.closingGarbage collection & refcountingDeterministic resource cleanup
3-Sekunden-Fazit (Deutsch)
- Wird ein Python-Generator vorzeitig verlassen, verzögert sich sein with- oder finally-Cleanup bis zur Garbage Collection.
- Da der Garbage Collector synchron arbeitet, plant er bei async-Generatoren aclose nur als Task ein, ohne darauf zu warten.
- Das Kapseln der Schleife mit contextlib.closing bzw. contextlib.aclosing erzwingt sofortiges Freigeben der Ressourcen.
Python Async-Generatorencontextlib.aclosingcontextlib.closingGarbage CollectionDeterministisches Cleanup
Note / Hinweis: Blueprints are AI-generated educational summaries (0% Politics · 0% Religion · 0% Brainrot) and do not constitute medical, legal, or financial advice. / KI-generierte Zusammenfassung zu Bildungszwecken – ersetzt keine medizinische, rechtliche oder finanzielle Fachberatung.