Anhang C. Etwas ganz anderes: Async
Unsere ersten beiden Anhänge waren für Programmieranfänger, aber dieser ist für diejenigen, die schon etwas fortgeschritten sind.
Wie die meisten Programmiersprachen ist Python synchron. Es durchläuft den Code linear, eine Zeile nach der anderen, von oben nach unten. Wenn du eine Funktion aufrufst, springt Python in ihren Code und der Aufrufer wartet, bis die Funktion zurückkehrt, bevor er seine Arbeit fortsetzt.
Deine CPU kann immer nur eine Sache auf einmal tun, also ist die synchrone Ausführung absolut sinnvoll. Aber es stellt sich heraus, dass ein Programm oft gar keinen Code ausführt, sondern auf etwas wartet, z. B. auf Daten aus einer Datei oder einem Netzwerkdienst. Das ist so, als würden wir auf einen Browserbildschirm starren, während wir darauf warten, dass eine Website geladen wird. Wenn wir dieses "beschäftigte Warten" vermeiden könnten, würden wir die Gesamtzeit unserer Programme verkürzen. Das nennt man auch Durchsatzsteigerung.
In Kapitel 15 hast du gesehen, dass du die Wahl zwischen Threads, Prozessen oder Lösungen von Drittanbietern wie gevent oder twisted hast, wenn du eine gewisse Gleichzeitigkeit erreichen willst. Inzwischen gibt es aber immer mehr asynchroneLösungen, die sowohl in Python integriert sind als auch von Drittanbietern stammen. Diese koexistieren mit dem üblichen synchronen Python-Code, aber - um eine Ghostbusters-Warnung aufzugreifen - du darfst die Ströme nicht kreuzen. Ich zeige dir, wie du ektoplasmische ...