How do I limit concurrency in asyncio?

In Python's asyncio library, you can limit concurrency using a semaphore. A semaphore is a synchronization primitive that can be used to control access to a shared resource by multiple coroutines. By using a semaphore, you can specify the maximum number of coroutines that can run concurrently.

Example of Limiting Concurrency with asyncio

In this example, we will create a simple asyncio program that limits the number of concurrent tasks using a semaphore.

import asyncio import random async def limited_task(semaphore, task_id): async with semaphore: print(f'Task {task_id} is starting.') await asyncio.sleep(random.uniform(1, 3)) print(f'Task {task_id} is completed.') async def main(): semaphore = asyncio.Semaphore(2) # Limit concurrency to 2 tasks = [limited_task(semaphore, i) for i in range(5)] await asyncio.gather(*tasks) asyncio.run(main())

asyncio concurrency semaphore Python coroutines