python / expert
Snippet
Asynchrone Iteration mit Kontext-Managern
Dies demonstriert die Kombination von asynchronen Kontext-Managern (__aenter__/__aexit__) mit asynchronen Iteratoren (__aiter__). Es ermöglicht ein sicheres Ressourcenmanagement in nebenläufigen Umgebungen, während Datenströme asynchron mit 'async with' und 'async for' verarbeitet werden.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import asyncioclass AsyncBuffer:async def __aenter__(self):print('Opening...')return selfasync def __aexit__(self, *args):print('Closing...')async def __aiter__(self):for i in range(3):await asyncio.sleep(0.1)yield iasync def main():async with AsyncBuffer() as buf:async for item in buf:print(item)
Erklärung
1
async def __aenter__(self):
Asynchrone Setup-Methode für den 'async with'-Block.
2
async def __aiter__(self):
Definiert das Objekt als asynchronen Iterator.
3
yield i
Produziert asynchron einen Wert für die 'async for'-Schleife.