Помогите разобраться с Queue в `asyncio` Python
Есть вот такой пример запускающий корутины по мере высвобождения слотов стека. Все работает так как нужно, но... Не могу понять как этот реализовать с использованием asyncio.Queue. Ну тоесть хочу понять на этом примере как вообще работают asyncio.Queue но как в стенку...
import asyncio
from datetime import datetime
limit = 3
start_t = datetime.now()
async def cor(sleep_time: float):
await asyncio.sleep(sleep_time)
print(sleep_time, datetime.now() - start_t)
items = [10, 15, 4, 5]
tasks = set()
global_task_iterator = (asyncio.create_task(cor(item)) for item in items)
def top_up_tasks():
while len(tasks) < limit:
try:
tasks.add(next(global_task_iterator))
except StopIteration:
break
async def start():
top_up_tasks()
while tasks:
done, _ = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)
for done_task in done:
tasks.discard(done_task)
top_up_tasks()
if __name__ == '__main__':
asyncio.run(start())
# 4 0:00:04.006700
# 5 0:00:09.015482
# 10 0:00:10.005626
# 15 0:00:15.012813