Skip to main content
idego
Python

Zurück in die Zukunft mit Async und Await in Python 3.5

Von Idego Group

Zurück in die Zukunft mit Async und Await in Python 3.5

Dieser Artikel untersucht die neuen asynchronen Programmierfunktionen von Python 3.5. Die Syntax async und await vereinfacht das Schreiben von kooperativem, nicht-blockierendem Code im Vergleich zu früheren generatorbasierten Ansätzen mit @asyncio.coroutine-Dekoratoren und yield from-Ausdrücken.

Der traditionelle Ansatz verwendete @asyncio.coroutine-Dekoratoren mit yield from-Ausdrücken. Obwohl funktional, erwies sich diese Syntax für Entwickler, die mit Generatormustern nicht vertraut sind, als weniger intuitiv. Die neue Syntax ersetzt diese Konstrukte durch lesbarere async def-Funktionsdefinitionen und await-Ausdrücke.

Beide Ansätze verfolgen dasselbe Ziel – die Verwaltung mehrerer I/O-Operationen effizient in einem einzigen Thread über eine Ereignisschleife – aber mit verbesserter Übersichtlichkeit. Das gleichzeitige Abrufen von drei URLs dauert etwa drei Sekunden statt der über sechs Sekunden, die eine sequenzielle Ausführung erfordern würde.

Die beiden syntaktischen Stile können jedoch nicht direkt gemischt werden. Mit async def definierte Funktionen können yield from nicht verwenden, und generatorbasierte Coroutinen können await nicht verwenden. Entwickler müssen konsequent einen Ansatz wählen.

Über die grundlegende Syntax hinaus führt Python 3.5 asynchrone Iterationsprotokolle durch async for-Schleifen und asynchrone Kontextmanager über async with-Anweisungen ein. Diese Funktionen grenzen explizit ab, wo die Ausführung ausgesetzt werden kann, was den Kontrollfluss transparent macht.

Obwohl syntaktischer Zucker allein geringfügig erscheinen mag, stellen diese Änderungen eine erhebliche Infrastruktur dar, die die asynchrone Programmierung in Pythons Zukunft unterstützt und möglicherweise die Adoption von Python 3 gegenüber älteren Versionen beschleunigt.

Verwandte Artikel