„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich mit Async/Await in Python „Fire and Forget“ erreichen?

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

Veröffentlicht am 21.11.2024
Durchsuche:517

How Can I Achieve

Async/Await „Fire and Forget“ in Python

Problem Statement

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())

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

Ausstehende Aufgaben verarbeiten

Wenn unser Skript abgeschlossen ist, 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 abgeschlossen sind, 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)

Dadurch werden die Aufgaben abgebrochen und alle Fehler unterdrückt, die aufgrund des Abbruchs auftreten können.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3