Heim  >  Artikel  >  Backend-Entwicklung  >  So erstellen und führen Sie asynchrone Aufgaben in Python aus

So erstellen und führen Sie asynchrone Aufgaben in Python aus

WBOY
WBOYnach vorne
2023-05-13 13:31:121822Durchsuche

    1. Was ist eine asynchrone Aufgabe?

    Eine asynchrone Aufgabe ist ein Objekt, das eine asynchrone Coroutine unabhängig plant und ausführt. Es stellt ein Handle für die versendete Coroutine bereit, das Asyncio-Programme abfragen und für die Interaktion mit der Coroutine verwenden können.

    Aufgaben werden aus Coroutinen erstellt. Es nimmt ein Coroutine-Objekt, umschließt die Coroutine, plant ihre Ausführung und stellt Methoden für die Interaktion mit ihr bereit. Aufgaben werden selbstständig ausgeführt. Dies bedeutet, dass es in der Asyncio-Ereignisschleife geplant wird und unabhängig davon ausgeführt wird, was in der Coroutine passiert, die es erstellt hat. Dies unterscheidet sich von der direkten Ausführung der Coroutine, bei der der Aufrufer auf den Abschluss warten muss.

    Die Klasse asyncio.Task erweitert die Klasse asyncio.Future, von der eine Instanz erwartet wird. Future ist eine Klasse niedrigerer Ebene, die das Ergebnis darstellt, das letztendlich eintreffen wird. Klassen, die die Future-Klasse erweitern, werden oft als Future-like bezeichnet.

    Da asynchrone Aufgaben erwartbar sind, bedeutet dies, dass die Coroutine Warteausdrücke verwenden kann, um auf den Abschluss der Aufgabe zu warten.

    ...
    # wait for a task to be done
    await task

    Da wir nun wissen, was eine Asyncio-Aufgabe ist, sehen wir uns an, wie man eine erstellt.

    2. So erstellen Sie eine Aufgabe

    Erstellen Sie eine Aufgabe mit der bereitgestellten Coroutine-Instanz. Denken Sie daran, dass eine Coroutine mithilfe eines asynchronen Def-Ausdrucks definiert wird und wie eine Funktion aussieht.

    # define a coroutine
    async def task_coroutine():
    	# ...

    Aufgaben können nur in Coroutinen erstellt und geplant werden. Es gibt zwei Hauptmethoden zum Erstellen und Planen von Aufgaben:

    • Erstellen Sie Aufgaben mithilfe einer High-Level-API (bevorzugt)

    • #🎜 🎜## 🎜🎜#Low-Level-API zum Erstellen von Aufgaben verwenden
    • 2.1 High-Level-API

    Sie können die Asyncio verwenden. Funktion create_task() zum Erstellen von Aufgaben. Die Funktion asyncio.create_task() akzeptiert eine Coroutine-Instanz und einen optionalen Aufgabennamen und gibt eine asyncio.Task-Instanz zurück.

    ...
    # create a coroutine
    coro = task_coroutine()
    # create a task from a coroutine
    task = asyncio.create_task(coro)

    Dies kann durch die Verwendung zusammengesetzter Anweisungen in einer Zeile erreicht werden.

    ...
    # create a task from a coroutine
    task = asyncio.create_task(task_coroutine())

    Dies wird ein paar Dinge bewirken:

      Die Coroutine in eine asynchrone Task-Instanz einschließen.
    • Planen von Aufgaben, die in der aktuellen Ereignisschleife ausgeführt werden sollen.
    • Gibt eine Aufgabeninstanz zurück.
    • Aufgabeninstanzen können gelöscht, über Methoden interagiert und dargestellt werden Die Coroutine wartet. Dies ist die bevorzugte Methode zum Erstellen von Aufgaben aus Coroutinen in Asyncio-Programmen.

    2.2. Low-Level-API

    Sie können auch die Low-Level-Asyncio-API verwenden, um Aufgaben aus Coroutinen zu erstellen.

    Die erste Methode ist die Verwendung der Funktion asyncio.ensure_future(). Diese Funktion benötigt eine Aufgabe, eine Zukunft oder ein zukunftsähnliches Objekt wie eine Coroutine und optional eine Schleife für deren Planung. Wenn keine Schleife bereitgestellt wird, wird sie in der aktuellen Ereignisschleife geplant.

    Wenn für diese Funktion eine Coroutine bereitgestellt wird, wird sie für uns in eine Instanz verpackt und dann zurückgegeben.

    ...
    # create and schedule the task
    task = asyncio.ensure_future(task_coroutine())

    Eine weitere Low-Level-Funktion, die wir zum Erstellen und Planen von Aufgaben verwenden können, ist die Methode loop.create_task(). Diese Funktion erfordert Zugriff auf eine bestimmte Ereignisschleife, in der die Coroutine als Aufgabe ausgeführt wird.

    Wir können die Instanz der aktuellen Ereignisschleife im Asyncio-Programm über die Funktion asyncio.get_event_loop() abrufen. Dies kann dann verwendet werden, um die Methode create_task() aufzurufen, um eine Task-Instanz zu erstellen und deren Ausführung zu planen.

    ...
    # get the current event loop
    loop = asyncio.get_event_loop()
    # create and schedule the task
    task = loop.create_task(task_coroutine())

    3. Wann wird die Aufgabe ausgeführt?

    Eine häufige Frage nach dem Erstellen einer Aufgabe ist: Wann wird sie ausgeführt?

    Obwohl wir die Coroutine über die Funktion create_task() so planen können, dass sie unabhängig als Aufgabe ausgeführt wird, wird sie möglicherweise nicht sofort ausgeführt. Tatsächlich wird die Aufgabe erst ausgeführt, wenn die Ereignisschleife ausgeführt werden kann.

    Dies geschieht so lange, bis alle anderen Coroutinen nicht mehr ausgeführt werden und die Aufgabe an der Reihe ist.

    Wenn wir beispielsweise ein Asyncio-Programm mit einer Coroutine haben, die Aufgaben erstellt und plant, werden die geplanten Aufgaben erst ausgeführt, wenn die aufrufende Coroutine, die die Aufgabe erstellt hat, angehalten wird.

    Dies kann passieren, wenn die aufrufende Coroutine schlafen geht, auf eine andere Coroutine oder Aufgabe wartet oder auf eine neue geplante Aufgabe wartet.

    ...
    # create a task from a coroutine
    task = asyncio.create_task(task_coroutine())
    # await the task, allowing it to run
    await task

    Jetzt wissen wir, was Aufgaben sind und wie wir sie planen.

    Das obige ist der detaillierte Inhalt vonSo erstellen und führen Sie asynchrone Aufgaben in Python aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen