CodeGym /Java Kurs /Python SELF DE /Asynchrone Iteratoren und Generatoren

Asynchrone Iteratoren und Generatoren

Python SELF DE
Level 26 , Lektion 3
Verfügbar

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.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION