10.1 AsyncIterator
Asynchrone Iteratoren (AsyncIterator)
ermöglichen die Arbeit mit
Datenfolgen, die Elemente asynchron erzeugen.
Sie werden in asynchronen Funktionen und Koroutinen zur Iteration über
Daten verwendet, die mit Verzögerung eintreffen können, z. B. aus
Netzwerkanfragen, asynchronen Ein-/Ausgabeoperationen oder anderen
asynchronen Quellen.
Asynchroner Iterator
Ein asynchroner Iterator muss zwei Methoden implementieren:
Methode __aiter__()
:
Diese Methode sollte den asynchronen Iterator selbst zurückgeben. Sie ähnelt
der Methode __iter__()
für synchrone Iteratoren.
Methode __anext__()
:
Diese Methode sollte den nächsten Wert asynchron zurückgeben oder
die Ausnahme StopAsyncIteration
auslösen, wenn keine Elemente mehr vorhanden sind.
Sie ähnelt der Methode __next__()
für synchrone Iteratoren.
Beispiel:
import asyncio
class AsyncIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __aiter__(self):
return self
async def __anext__(self)(self):
if self.current >= self.end:
raise StopAsyncIteration
await asyncio.sleep(1) # Simulation einer asynchronen Verzögerung
self.current += 1
return self.current
async def main():
async for number in AsyncIterator(1, 5):
print(number)
asyncio.run(main())
Asynchrone Iteratoren ermöglichen die Verarbeitung von Daten, sobald sie eintreffen, ohne die Ausführung anderer Aufgaben zu blockieren. Das ist besonders nützlich für die Arbeit mit Netzwerkanfragen und anderen asynchronen Operationen.
Der Einsatz asynchroner Iteratoren ermöglicht es, einen besser lesbaren und wartbaren Code zur Verarbeitung von Datenfolgen asynchron zu schreiben.
10.2 AsyncGenerator
Asynchrone Generatoren ermöglichen das asynchrone Erzeugen von Werten,
indem Schlüsselwörter wie async
und await
verwendet werden.
Sie funktionieren ähnlich wie normale Generatoren, können aber
die Ausführung zur Durchführung asynchroner Operationen unterbrechen.
Erstellung eines asynchronen Generators
Ein asynchroner Generator wird mit
async
def
und yield
definiert.
Asynchrone Generatoren können await
innerhalb
ihrer Funktion verwenden, um asynchrone Operationen durchzuführen.
Beispiel:
async def async_generator():
for i in range(3):
await asyncio.sleep(1) # Asynchrone Verzögerung
yield i # Wert erzeugen
Verwendung eines asynchronen Generators
Asynchrone Generatoren werden innerhalb asynchroner Funktionen mit
dem async for
-Operator verwendet.
import asyncio
async def main():
async for value in async_generator():
print(value)
asyncio.run(main())
Asynchrone Generatoren verbessern die Lesbarkeit und Wartbarkeit des Codes,
indem sie eine einfache Syntaxkonstruktion
async for
für die Arbeit mit asynchronen Sequenzen verwenden.
GO TO FULL VERSION