Heim  >  Artikel  >  Backend-Entwicklung  >  So wenden Sie die asynchrone Python-Ableitung an

So wenden Sie die asynchrone Python-Ableitung an

nach vorne
2023-04-19 15:07:08863Durchsuche

Einführung

Wenn wir an „pythonisch“ denken, sind Verständnisse wie Listen- und Wörterbuchverständnisse ein Merkmal von Python.

Auf diese Weise führen wir im Gegensatz zu vielen anderen Sprachen Schleifen aus.

Asyncio ermöglicht uns die Verwendung asynchroner Verständnisse.

Wir können asynchrone Comprehensions verwenden, um über asynchrone Generatoren und asynchrone Iteratoren über „async for“-Ausdrücke zu iterieren.

1. Was ist asynchrone Ableitung?

Asynchrone Ableitung ist eine asynchrone Version der klassischen Ableitung. Asyncio unterstützt zwei Arten asynchroner Comprehensions: „Async for“-Comprehensions und „Warten“-Comprehensions.

Bevor wir uns die einzelnen Varianten ansehen, werfen wir zunächst einen Blick auf die klassische Ableitung.

2. Comprehensions

Comprehensions ermöglichen Ihnen die übersichtliche Erstellung von Datensammlungen wie Listen, Wörterbüchern und Sätzen. Listenverständnisse ermöglichen das Erstellen einer Liste aus einem for-Ausdruck innerhalb eines neuen Listenausdrucks.

...
# create a list using a list comprehension
result = [a*2 for a in range(100)]

unterstützt auch Verständnisse zum Erstellen von Wörterbüchern und Sätzen.

...
# create a dict using a comprehension
result = {a:i for a,i in zip(['a','b','c'],range(3))}
# create a set using a comprehension
result = {a for a in [1, 2, 3, 2, 3, 1, 5, 4]}

3. Asynchrone Comprehensions

Asynchrone Comprehensions ermöglichen die Erstellung von Listen, Mengen oder Wörterbüchern mithilfe von „async for“-Ausdrücken mit asynchronen iterierbaren Objekten.

...
# async list comprehension with an async iterator
result = [a async for a in aiterable]

Dadurch werden Coroutinen oder Aufgaben nach Bedarf erstellt und geplant und ihre Ergebnisse in eine Liste eingetragen.

Denken Sie daran, dass der Ausdruck „async for“ nur in Coroutinen und Aufgaben verwendet werden kann.

Denken Sie auch daran, dass ein asynchroner Iterator ein Iterator ist, der erwartbare Objekte erzeugt.

Der Ausdruck „async for“ ermöglicht es dem Aufrufer, über einen asynchronen Iterator erwarteter Objekte zu iterieren und die Ergebnisse von jedem Objekt abzurufen.

Intern analysiert die asynchrone for-Schleife bei Bedarf automatisch jede erwartbare Versand-Coroutine oder wartet darauf.

Asynchrone Generatoren implementieren automatisch asynchrone Iteratormethoden und können auch zur asynchronen Ableitung verwendet werden.

...
# async list comprehension with an async generator
result = [a async for a in agenerator]

4. Warte-Verstehen

Der Ausdruck „Warten“ kann auch im Listen-, Mengen- oder Wörterbuch-Verstehen verwendet werden, das als „Warten-Verstehen“ bezeichnet wird.

Wie asynchrone Verständnisse kann es nur in asynchronen Coroutinen oder Aufgaben verwendet werden.

Dies ermöglicht die Erstellung von Datenstrukturen wie Listen durch Anhalten und Warten auf eine Folge von erwartbaren Objekten.

...
# await list compression with a collection of awaitables
results = [await a for a in awaitables]

Dadurch wird eine Ergebnisliste erstellt, indem nacheinander auf jedes zu erwartende Objekt gewartet wird.

Die aktuelle Coroutine wird angehalten, um wartebare Objekte nacheinander auszuführen, was sich von der gleichzeitigen Ausführung mit asyncio.gather() unterscheidet und möglicherweise langsamer ist.

Das obige ist der detaillierte Inhalt vonSo wenden Sie die asynchrone Python-Ableitung an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen