Python の async/await の基本
async と await を使うと、非同期処理を同期的なコードのように書けます。I/O 待ちの多い処理で効率が向上します。
基本構文
async def で非同期関数(コルーチン関数)を定義し、await で非同期処理の完了を待ちます。
import asyncio
async def greet(name):
await asyncio.sleep(1) # 1秒待機(非同期)
return f"Hello, {name}!"
async def main():
result = await greet("Alice")
print(result)
asyncio.run(main())
並行実行
複数の非同期処理を並行して実行できます。
import asyncio
async def fetch(url, delay):
await asyncio.sleep(delay)
return f"Fetched {url}"
async def main():
tasks = [
fetch("url1", 2),
fetch("url2", 1),
fetch("url3", 3),
]
results = await asyncio.gather(*tasks)
for r in results:
print(r)
asyncio.run(main())
3 つの処理が並行して実行されるため、合計 3 秒程度で完了します(順次実行なら 6 秒)。
通常の関数との違い
同期関数(def)
呼び出すと即座に実行される。戻り値は通常の値。
非同期関数(async def)
呼び出すとコルーチンオブジェクトを返す。await で実行される。
async def async_func():
return 42
coro = async_func() # コルーチンオブジェクト
print(type(coro)) # <class 'coroutine'>
注意点
非同期関数は、ネットワーク通信やファイル I/O など待ち時間のある処理を効率的に扱えます。