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.
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())
Dadurch wird eine Aufgabe für async_foo() erstellt, die asynchron ausgeführt wird, ohne den Hauptthread zu blockieren.
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))
Dadurch wird sichergestellt, dass alle Aufgaben erledigt sind abgeschlossen sein, bevor das Skript beendet wird, wodurch Warnungen oder Fehler vermieden werden.
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)
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!