Python 3.5 の AsyncIO: Await を使用する場合と回避する場合
Python 3.5 で asyncio を使用する場合は、 await 構文を使用するための適切なシナリオ。
Await を使用する場合
Await は、I/O 操作を実行する非同期関数に使用する必要があります。これには、ファイル システム、ネットワーク、またはイベント ループの実行をブロックする可能性のあるその他のリソースにアクセスする関数が含まれます。 await を使用すると、I/O 操作が完了するまでタスクが一時停止され、その間にイベント ループが他のタスクを処理できるようになります。
Await を使用する場合の例:
- URL からのデータのダウンロード: content = await download(url)
- ファイルを開いて読み取る: data = await open_file(filename)
- network: result = await send_request(data)
Await を避けるべき場合
I/O 操作を実行しない関数の await を避けてください。同期コードに await を使用すると、不要なオーバーヘッドが発生し、実行時間が増加する可能性があります。
Await を回避する場合の例:
- データの解析: parsed_data = parse(input )
- 単純な計算: result = Calculate(a, b)
- オブジェクトの操作: object.value = new_value
特別な考慮事項:
-
長時間実行の同期操作: 非同期関数内で完了までに長い時間 (50 ミリ秒以上など) かかる同期操作を避けてください。これにより、イベント ループがブロックされ、他のタスクの実行が妨げられる可能性があります。
-
長時間にわたる同期操作の別のプロセス: 長時間実行される同期操作が必要な場合は、別のプロセスに移動できます。
-
I/O 操作用の ThreadPoolExecutor: イベント ループをブロックすべきではない I/O 操作 (requests.get など) には ThreadPoolExecutor を使用します。これにより、ProcessPoolExecutor に関連するオーバーヘッドが回避され、パフォーマンスが向上します。
以上がPython 3.5 の AsyncIO: Await をいつ使用するか、いつ使用を避けるべきか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。