I want to run all the coroutines from the list in a pool of constant size and would like to ask if this is the right way how to achieve it. Is there any built in solution for this problem? I have not found any. def subprocess_pool(coroutines, pool_size=3): loop = asyncio.get_event_loop() event_finished = asyncio.Event() def done(future): event_finished.set() @asyncio.coroutine def scheduler(coroutines): num = len(coroutines) finished = 0 started = 0 while finished<num: if coroutines and (started - finished) < pool_size: cor = coroutines.pop(0) task = loop.create_task(cor) task.add_done_callback(done) started += 1 else: yield from event_finished.wait() event_finished.clear() finished += 1 return True loop.run_until_complete(scheduler(coroutines)) loop.close()