asyncio.Semaphore は、非同期プログラムでのリソースの制限を管理するために使用される同期プリミティブです。セマフォは、リソースの同時アクセス数を制限するために用いられます。asyncio.Semaphore は非同期タスクがリソースを安全に共有できるようにするため、特にIO操作や並行処理が多い場合に役立ちます。
基本的な概念
セマフォは、指定された数の許可(「トークン」)を保持しており、リソースを使用するにはトークンを取得する必要があります。リソースを使用し終わると、そのトークンを返却します。これにより、同時にリソースを使用できるタスクの数が制限されます。
使用方法
import asyncio
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())