Wie kann ich mit Async/Await in Python „Fire and Forget' erreichen?

Mary-Kate Olsen
Freigeben: 2024-11-14 10:21:01
Original
852 Leute haben es durchsucht

How Can I Achieve

Async/Await „Fire and Forget“ in Python

Problemstellung

Async/await bietet eine praktische Syntax für die asynchrone Programmierung in Python. Es gibt jedoch Situationen, in denen wir einen asynchronen Vorgang starten möchten, ohne auf dessen Abschluss zu warten. Dies wird oft als „Feuer und Vergessen“ bezeichnet.

Lösung mit asyncio.Task

Python stellt asyncio.Task bereit, mit dem wir eine Aufgabe erstellen können, die im Hintergrund ausgeführt wird. Mit asyncio.Task können wir „Fire and Forget“ erreichen, indem wir den folgenden Code zu unserem Skript hinzufügen:

import asyncio

async def async_foo():
    # Do some asynchronous stuff here

# Create a task for async_foo()
asyncio.ensure_future(async_foo())
Nach dem Login kopieren

Dadurch wird eine Aufgabe für async_foo() erstellt, die asynchron ausgeführt wird, ohne den Hauptthread zu blockieren.

Umgang mit ausstehenden Aufgaben

Wenn unser Skript abgeschlossen wird, bevor alle Aufgaben abgeschlossen sind, können wir den folgenden Code verwenden, um auf alle ausstehenden Aufgaben zu warten:

pending_tasks = asyncio.Task.all_tasks()
loop.run_until_complete(asyncio.gather(*pending_tasks))
Nach dem Login kopieren

Dadurch wird sichergestellt, dass alle Aufgaben erledigt sind abgeschlossen sein, bevor das Skript beendet wird, wodurch Warnungen oder Fehler vermieden werden.

Aufgaben abbrechen

In manchen Fällen möchten wir möglicherweise nicht warten, bis Aufgaben abgeschlossen sind. Wir können sie mit dem folgenden Code abbrechen:

for task in pending_tasks:
    task.cancel()
    with suppress(asyncio.CancelledError):
        loop.run_until_complete(task)
Nach dem Login kopieren

Dadurch werden die Aufgaben abgebrochen und alle Fehler unterdrückt, die durch den Abbruch entstehen können.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Async/Await in Python „Fire and Forget' erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage