14 Jun
2018
14 Jun
'18
10:31 p.m.
On Thu, Jun 14, 2018 at 10:03 PM Steve Dower
I often use semaphores for this when I need it, and it looks like asyncio.Semaphore() is sufficient for this:
import asyncio task_limiter = asyncio.Semaphore(4)
async def my_task(): await task_limiter.acquire() try: await do_db_request() finally: task_limiter.release()
Yeah, a semaphore logically fits exactly but * I feel this API is somewhat clunky, even if you use an 'async with'. * my gut feeling is spawning a thousand tasks and having them all fighting over the same semaphore and scheduling is going to be much less efficient than a small number of tasks draining a queue.