Помогите разобраться с 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

Ответы (0 шт):