Mit der asynchronen Programmierfunktion von Python, kurz Async, können Sie Programme schreiben, die mehr Arbeit erledigen, indem Sie nicht auf den Abschluss unabhängiger Aufgaben warten.

Die in Python enthaltene Asyncio-Bibliothek bietet Ihnen die Tools, mit denen Sie Async für die Verarbeitung von Festplatten- oder Netzwerk-E / A verwenden können, ohne dass alles andere warten muss.

asyncio bietet zwei Arten von APIs für den Umgang mit asynchronen Vorgängen: High-Level und Low-Level. Die High-Level-APIs sind am allgemeinsten nützlich und für die unterschiedlichsten Anwendungen anwendbar. Die Low-Level-APIs sind leistungsstark, aber auch komplex und werden weniger häufig verwendet.

Wir werden uns in diesem Artikel auf die allgemeinen APIs konzentrieren. In den folgenden Abschnitten werden die in Asyncio am häufigsten verwendeten High-Level-APIs beschrieben und gezeigt, wie sie für allgemeine Vorgänge mit asynchronen Aufgaben verwendet werden können.

Wenn Sie mit Async in Python noch nicht vertraut sind oder eine Auffrischung der Funktionsweise benötigen, lesen Sie meine Einführung in Python Async, bevor Sie hier eintauchen.

Führen Sie Coroutinen und Aufgaben in Python aus

Natürlich wird Asyncio am häufigsten verwendet, um die asynchronen Teile Ihres Python-Skripts auszuführen. Dies bedeutet, dass Sie lernen, mit Coroutinen und Aufgaben zu arbeiten.

Die asynchronen Komponenten von Python, einschließlich Coroutinen und Aufgaben, können nur mit anderen asynchronen Komponenten und nicht mit herkömmlichem synchronem Python verwendet werden. Sie benötigen daher Asyncio, um diese Lücke zu schließen. Dazu verwenden Sie die Funktion asyncio.run:

Asyncio importieren
async def main ():
Drucken („5 Sekunden warten.“)
für _ im Bereich (5):
warte auf asyncio.sleep (1)
drucken („.“)
Drucken („Warten beendet.“)
asyncio.run (main ())

Dies führt main () zusammen mit allen Coroutines aus, die main () auslöst, und wartet auf die Rückkehr eines Ergebnisses.

In der Regel sollte ein Python-Programm nur eine .run () -Anweisung haben, genauso wie ein Python-Programm nur eine main () -Funktion haben sollte.

Async kann bei unachtsamer Verwendung den Kontrollfluss eines Programms schwer lesbar machen. Ein einziger Einstiegspunkt in den Async-Code eines Programms verhindert, dass die Dinge haarig werden.

Asynchrone Funktionen können auch als Aufgaben oder Objekte geplant werden, die Coroutinen umschließen und deren Ausführung unterstützen.

async def my_task ():
etwas tun()
task = asyncio.create_task (my_task ())
my_task () wird dann in der Ereignisschleife ausgeführt, wobei die Ergebnisse in der Task gespeichert werden.

Wenn Sie nur eine Aufgabe haben, von der Sie Ergebnisse erhalten möchten, können Sie mit asyncio.wait_for (Aufgabe) warten, bis die Aufgabe beendet ist, und dann mit task.result () das Ergebnis abrufen.

Wenn Sie jedoch eine Reihe von Aufgaben für die Ausführung geplant haben und warten möchten, bis alle abgeschlossen sind, verwenden Sie asyncio.wait ([Aufgabe1, Aufgabe2]), um die Ergebnisse zu erfassen.

(Beachten Sie, dass Sie ein Zeitlimit für die Vorgänge festlegen können, wenn diese nicht länger als eine bestimmte Zeit ausgeführt werden sollen.)

Share: