Python 18.3 async/await

1069 ワード

async/await asyncioで提供される@asyncio.coroutineは、1つのgeneratorをcoroutineタイプとしてマークし、coroutine内部でyield fromで別のcoroutineを呼び出して非同期動作を実現することができる.
非同期IOを簡略化し、よりよく識別するために、Python 3.5から新しい構文asyncawaitが導入され、coroutineのコードをより簡潔に読みやすくすることができます.asyncawaitはcoroutineの新しい構文です.新しい構文を使用するには、2つのステップで簡単に置き換える必要があります.
  • @asyncio.coroutineasyncに置き換えた.
  • yield fromawaitに置き換えます.

  • 前のセクションのコードを比較してみましょう.
    @asyncio.coroutinedef hello():
        print("Hello world!")
        r = yield from asyncio.sleep(1)
        print("Hello again!")

    新しい構文で次のように書き直します.
    async def hello():
        print("Hello world!")
        r = await asyncio.sleep(1)
        print("Hello again!")

    残りのコードは変わらない.
    小結
    Pythonは3.5バージョンからasyncioasyncawaitの新しい文法を提供した.
    注意新しい構文はPython 3.5以降のバージョンでのみ使用できますが、3.4バージョンを使用する場合は、前節のシナリオを使用する必要があります.