


Wie implementiert man asynchrone „Fire and Forget'-Operationen in Python Async/Await?
Nov 09, 2024 am 01:08 AM„Fire and Forget“ in Python Async/Await
In bestimmten Szenarien besteht die Notwendigkeit, einen asynchronen Vorgang zu initiieren, der nicht auf seinen Abschluss warten muss . Traditionell könnte der „Fire and Forget“-Ansatz in den Coroutinen von Tornado durch Weglassen des Schlüsselworts yield erreicht werden.
In der async/await-Syntax von Python 3.5 löst eine solche Implementierung jedoch eine RuntimeWarning aus, die darauf hinweist, dass die Coroutine wurde nie erwartet.
Asyncio.Task: Die Lösung
Glücklicherweise bietet die Asyncio-Bibliothek von Python über ihre Klasse asyncio.Task eine Lösung. Dies ermöglicht die Erstellung einer Aufgabe, die im Hintergrund ausgeführt werden kann, ohne die Hauptausführung zu blockieren.
import asyncio async def async_foo(): print("async_foo started") await asyncio.sleep(1) print("async_foo done") async def main(): asyncio.ensure_future(async_foo()) # fire and forget async_foo() # continue with other actions if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main())
Dieser Ansatz stellt sicher, dass async_foo() asynchron ausgeführt wird, während andere Aktionen ohne Wartezeit fortgesetzt werden können.
Umgang mit ausstehenden Aufgaben
Es ist wichtig zu beachten, dass Asyncio erwartet, dass alle Aufgaben abgeschlossen sind, wenn die Ereignisschleife abgeschlossen ist. Daher können alle verbleibenden ausstehenden Aufgaben zu Warnungen führen. Um dies zu verhindern, kann man entweder alle ausstehenden Aufgaben abwarten oder sie abbrechen.
Option 1: Auf ausstehende Aufgaben warten
pending = asyncio.Task.all_tasks() loop.run_until_complete(asyncio.gather(*pending))
Option 2: Ausstehende Aufgaben abbrechen Aufgaben
pending = asyncio.Task.all_tasks() for task in pending: task.cancel() with suppress(asyncio.CancelledError): loop.run_until_complete(task)
Durch das Abbrechen der Aufgaben werden diese aus dem Zeitplan der Ereignisschleife entfernt, wodurch mögliche Warnungen vermieden werden.
Das obige ist der detaillierte Inhalt vonWie implementiert man asynchrone „Fire and Forget'-Operationen in Python Async/Await?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?

Serialisierung und Deserialisierung von Python -Objekten: Teil 1

So implementieren Sie Ihre eigene Datenstruktur in Python
