<div dir="ltr">On Thu, Jun 14, 2018 at 10:03 PM Steve Dower <<a href="mailto:steve.dower@python.org">steve.dower@python.org</a>> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I often use <br>
semaphores for this when I need it, and it looks like <br>
asyncio.Semaphore() is sufficient for this:<br>
<br>
<br>
import asyncio<br>
task_limiter = asyncio.Semaphore(4)<br>
<br>
async def my_task():<br>
     await task_limiter.acquire()<br>
     try:<br>
         await do_db_request()<br>
     finally:<br>
         task_limiter.release() </blockquote><div> </div><div>Yeah, a semaphore logically fits exactly but<br></div><div><br></div><div>* I feel this API is somewhat clunky, even if you use an 'async with'.<br></div><div><br></div><div>* 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.<br></div></div></div>