Pythonの非同期処理について理解を深めるために、async
とawait
のキーワードに焦点を当ててみましょう。
asyncとawaitの基本
Python 3.5から、非同期I/Oを簡素化し、コルーチンのコードをより読みやすくするために新しい構文async
とawait
が導入されました。これらの新しい構文を使用するには、以下の2つの簡単な置換を行うだけです:
@asyncio.coroutine
をasync
に置換します。yield from
をawait
に置換します。
これらのキーワードは、非同期プログラミングを可能にするasyncio
という組み込みの高レベルパッケージで使用されます。
asyncの使用
async
キーワードは、関数定義の前に置くことで、その関数をコルーチン関数として定義します。例えば、次のように使用します:
import asyncio
async def hello_world():
print("Hello World!")
hello_world()
このコードを実行すると、「’hello_world’コルーチンがawaitされてないよ」という警告が表示されます。これは、Pythonのasync def
が単なる関数定義ではなく、コルーチン関数定義であるためです。コルーチン関数を実行すると、コルーチンオブジェクトが返され、このオブジェクトはイベントループ内でのみ実行可能です。
awaitの使用
await
キーワードは、コルーチン関数内で使用され、指定したコルーチンの完了を待ちます。例えば、次のように使用します:
import asyncio
async def hello_world():
print("Hello World!")
async def call_hello_world():
await hello_world()
loop = asyncio.get_event_loop()
loop.run_until_complete(call_hello_world())
このコードでは、hello_world()
が生成したコルーチンオブジェクトが実行されているように見えます。
まとめ
Pythonのasync
とawait
キーワードは、非同期プログラミングを簡素化し、コルーチンのコードをより読みやすくするための強力なツールです。これらのキーワードを理解し、適切に使用することで、Pythonでの非同期プログラミングがより効率的で直感的になります。