(original) (raw)
On Thu, Jun 14, 2018 at 10:03 PM Steve Dower <steve.dower@python.org> wrote:
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.