Asyncioコードを書いたが、内部の仕組みをよりよく理解しようとしている人の観点から、yield from
、await
とは何ですか。また、非同期コードを許可するのにどのように役立ちますか。
非常に高い投票yield from
構文の使用について尋ねる質問と asyncとawaitを説明するもの がありますが、両方とも異なるトピックについて深く掘り下げており、そうではありません基盤となるコードと、それがasyncioにどのように適合するかについての簡潔な説明です。
短い答え:
_yield from
_は、asyncioのコルーチンを待つ古い方法です。
await
は、asyncioのコルーチンを待つ最新の方法です。
詳細な回答:
Pythonにはジェネレーターがあります-単一の値ではなく、結果のシーケンスを生成する特別な種類の関数。 Python 3.3 _yield from
_式が追加されました。It allows 操作の一部を別のジェネレーターに委任する1つのジェネレーター。
Python 3.4 asyncio
モジュールが標準ライブラリに追加されました。明確で理解可能な非同期コードを記述できます。技術的にasyncioのコルーチンはさまざまな方法で実装できますが、asyncio
excellent video は、ジェネレーターを使用してコルーチンを実装する方法を示しています)_@asyncio.coroutine
_はジェネレーターからコルーチンを作成する方法であり、_yield from
_は待機する方法でしたコルーチン-実装の詳細。
_yield from
_が2つの「異なるもの」に使用されるようになったのは、そのためです。
Python 3.5( PEP 492 を参照)で始まるコルーチンに新しい構文が追加されました。コルーチンを_async def
_で定義し、await
式を使用して待機できます。書くのが短くなるだけでなく、asyncioのコルーチンを使用していることを理解しやすくなります。
Python 3.5+を使用している場合、asyncioのコルーチンに_yield from
_を使用することを忘れて、await
を使用することができます。