capypad
0 Tage Serie
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
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import asyncio
 
class AsyncBuffer:
async def __aenter__(self):
print('Opening...')
return self
 
async def __aexit__(self, *args):
print('Closing...')
 
async def __aiter__(self):
for i in range(3):
await asyncio.sleep(0.1)
yield i
 
async 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.