Erstellen und Ausführen von Coroutinen
Swipe um das Menü anzuzeigen
Um mit asynchroner Programmierung in Python zu arbeiten, ist das Verständnis von Coroutinen erforderlich. Eine Coroutine ist eine spezielle Funktion, die mit async def definiert wird. Coroutinen ermöglichen das Anhalten und Fortsetzen der Ausführung, sodass Aufgaben wie das Warten auf Ein-/Ausgabeoperationen – etwa das Lesen von Dateien, Netzwerk-Anfragen oder Datenbankabfragen – durchgeführt werden können, ohne das gesamte Programm zu blockieren. Das bedeutet, dass während eine Aufgabe auf Daten wartet, andere Aufgaben weiterlaufen können, was die Effizienz und Reaktionsfähigkeit verbessert.
Zum Ausführen einer Coroutine verwendet man asyncio.run, das eine Ereignisschleife startet, die Coroutine ausführt und die Schleife nach Abschluss schließt. Dies ist die Standardmethode, um asynchronen Code im modernen Python zu starten.
Wenn mehrere Coroutinen gleichzeitig ausgeführt werden sollen, kann asyncio.gather verwendet werden, um sie parallel zu planen. Dadurch kann das Programm mehrere Aufgaben starten und auf deren Abschluss warten, was insbesondere bei langsamen Operationen wie I/O die Zeit besser nutzt.
Der folgende Code demonstriert diese Konzepte.
import asyncio
async def greet(name, delay):
await asyncio.sleep(delay)
print(f"Hello, {name}!")
async def main():
# Schedule two coroutines to run concurrently
await asyncio.gather(
greet("Alice", 2),
greet("Bob", 1)
)
asyncio.run(main())
Erwartetes Ergebnis:
Hello, Bob!
Hello, Alice!
Bobs Begrüßung erscheint zuerst, da sie eine kürzere Verzögerung (1 Sekunde) als die von Alice (2 Sekunden) verwendet.
Die Coroutine greet wird mit async def erstellt und kann ihre Ausführung mit await asyncio.sleep(delay) unterbrechen, bevor eine Begrüßung ausgegeben wird. Die Coroutine main plant zwei Instanzen von greet ein – eine für "Alice" mit einer Verzögerung von 2 Sekunden und eine für "Bob" mit einer Verzögerung von 1 Sekunde – mithilfe von asyncio.gather. Dadurch werden beide Begrüßungen gleichzeitig verarbeitet, sodass das Programm nicht auf das Ende der einen warten muss, bevor die andere startet. Abschließend startet asyncio.run(main()) die Ereignisschleife, führt die Coroutine main aus und sorgt dafür, dass anschließend alles aufgeräumt wird. Mit diesem Ansatz können mehrere Aufgaben, die Wartezeiten beinhalten (wie Netzwerkabfragen oder Zeitverzögerungen), gleichzeitig bearbeitet werden, was das Programm effizienter und reaktionsschneller macht.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen