asyncio.Semaphore は、非同期プログラムでのリソースの制限を管理するために使用される同期プリミティブです。セマフォは、リソースの同時アクセス数を制限するために用いられます。asyncio.Semaphore は非同期タスクがリソースを安全に共有できるようにするため、特にIO操作や並行処理が多い場合に役立ちます。
基本的な概念
セマフォは、指定された数の許可(「トークン」)を保持しており、リソースを使用するにはトークンを取得する必要があります。リソースを使用し終わると、そのトークンを返却します。これにより、同時にリソースを使用できるタスクの数が制限されます。
使用方法
import asyncio # セマフォの作成(最大同時実行数は3) semaphore = asyncio.Semaphore(3) async def access_resource(task_id): async with semaphore: print(f"Task {task_id} is accessing the resource") await asyncio.sleep(2) # リソースにアクセス中(非同期操作) print(f"Task {task_id} has finished using the resource") async def main(): # タスクを並行して実行 tasks = [access_resource(i) for i in range(5)] await asyncio.gather(*tasks) # 非同期実行 asyncio.run(main())