import asyncio
from datetime import datetime
async def async_print():
print(datetime.now())
await asyncio.sleep(1)
async def gather_with_concurrency(n, *tasks):
semaphore = asyncio.Semaphore(n)
async def sem_task(task):
async with semaphore:
return await task
return await asyncio.gather(*(sem_task(task) for task in tasks))
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(
gather_with_concurrency(3, *(async_print() for _ in range(20)))
)