Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Erstellen und Ausführen von Coroutinen | Asynchronous Programming
Python Fortgeschrittene Konzepte

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.

question mark

Welche Aussage beschreibt am besten, wie asyncio.gather Coroutinen plant?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 4. Kapitel 2
some-alt