ホームページ  >  記事  >  バックエンド開発  >  Python 非同期派生を適用する方法

Python 非同期派生を適用する方法

転載
2023-04-19 15:07:08863ブラウズ

はじめに

「Python」というと、リスト内包表記や辞書内包表記などの内包表記が Python の機能です。

これは、他の多くの言語とは異なり、ループを実行する方法の 1 つです。

Asyncio を使用すると、非同期内包表記を使用できます。

非同期内包表記を使用すると、「async for」式を通じて非同期ジェネレーターと非同期イテレーターをトラバースできます。

1. 非同期導出とは

非同期導出は、従来の導出の非同期バージョンです。 Asyncio は、「async for」内包表記と「await」内包表記の 2 種類の非同期内包表記をサポートしています。

それぞれを検討する前に、まず古典的な導出を確認しましょう。

2. 内包表記

内包表記を使用すると、リスト、辞書、セットなどのデータ コレクションを簡潔な方法で作成できます。リスト内包表記を使用すると、新しいリスト式内の for 式からリストを作成できます。

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

は、辞書とセットを作成するための内包表記もサポートしています。

...
# 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. 非同期内包表記

非同期内包表記では、非同期反復可能オブジェクトで「async for」式を使用してリスト、セット、または辞書を作成できます。

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

これにより、必要に応じてコルーチンまたはタスクが作成およびスケジュールされ、その結果がリストに追加されます。

「async for」式はコルーチンとタスクでのみ使用できることを思い出してください。

また、非同期イテレータは待機可能なオブジェクトを生成するイテレータであることを思い出してください。

「async for」式を使用すると、呼び出し元は待機オブジェクトの非同期反復子を反復処理し、各オブジェクトから結果を取得できます。

内部的には、async for ループは必要に応じて待機可能な各ディスパッチ コルーチンを自動的に解析または待機します。

非同期ジェネレーターは、非同期イテレーターのメソッドを自動的に実装し、非同期導出にも使用できます。

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

4. 導出待ち

「wait」式は、導出待ちと呼ばれるリスト、セット、または辞書内包表記でも使用できます。

非同期導出と同様、非同期コルーチンまたはタスクでのみ使用できます。

これにより、一連の待機可能なオブジェクトを一時停止して待機することにより、リストなどのデータ構造を作成できます。

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

これは、各待機可能なオブジェクトを順番に待機することにより、結果のリストを作成します。

現在のコルーチンは、待機可能なオブジェクトを順番に実行するために一時停止されます。これは、asyncio.gather() を使用してオブジェクトを同時に実行するのとは異なり、速度が遅くなる可能性があります。

以上がPython 非同期派生を適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。