asyncio の仕組み
非同期プログラミングを使用すると、入出力 (I/O) 操作の完了を待たずにプログラムの実行を継続できるため、パフォーマンスと応答性が向上します。非同期プログラミングを実装する人気のある Python ライブラリの 1 つは、asyncio です。
基礎
asyncio の仕組みを詳しく説明する前に、いくつかの基本的な概念について考えてみましょう。
-
ジェネレーター: ジェネレーターは値を生成する Python オブジェクトであり、
-
コルーチン: コルーチンは、async def キーワードを使用して作成された非同期ジェネレーターです。 await キーワードを使用して実行を一時停止したり再開したりします。
asyncio アーキテクチャ
asyncio の中核には、次の 3 つの主要なコンポーネントが含まれます。
-
タスク: これらはコルーチンをカプセル化し、次のものと通信します。
-
Future: これらは非同期操作の結果または例外を保持し、それらが使用可能になったときにタスクに通知します。
-
Event Loop: これはスケジュールを設定します。タスクを実行し、非同期実行を駆動します。
I/O実装
asyncio の非同期 I/O は、イベント ループと select() 関数を通じて実現されます。 Select は、データの可用性または書き込みの準備状況についてソケットを監視します。
- I/O 操作が実行されると、asyncio はデータをすぐに処理できるかどうかを評価します。
- ソケットがさらなるアクションを必要とする場合、asyncio は select() でそれを登録し、その Future を作成します。
- これらの Future を待っているタスクは一時停止します。
- イベント ループは、ソケット イベントを待機する select() を呼び出します。
- イベントが発生すると、対応する Future が完了に設定され、データが利用可能であることを示します。
- 関連付けられたタスクが起動してコルーチンを再開し、データの読み取りまたは書き込みを行います。
より大きなもの画像
asyncio を使用した非同期プログラミングでは、他のタスクが並行して実行され続けている間に、イベント ループで I/O 操作を処理できます。これにより、特に多数の I/O 操作や長時間実行されるタスクを伴うアプリケーションで、利用可能なリソースを最適に活用する応答性の高い効率的なプログラムが実現します。
以上がasyncio は Python での非同期プログラミングをどのように実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。