LINUX.ORG.RU

История изменений

Исправление vvn_black, (текущая версия) :

Как вариант, по очереди на каждый воркер, ну и ещё какой-то контроллер, который задачки по очередям распихивает:

async def worker1(queue):
    while True:
        asyncio.sleep(1)
        task = await queue.get()

        await processing(task)
...


worker1_queue = asyncio.Queue()
w1 = asyncio.create_task(worker1(worker1_queue))

...

while condition:
    ...
    await worker1_queue.put(task1)
    await worker2_queue.put(task2)
    await worker3_queue.put(task3)

...
w1.cancel()
await w1
...

Исходная версия vvn_black, :

Как вариант, по очереди на каждый воркер, ну и ещё какой-то контроллер, который задачки по очередям распихивает:

async def worker(queue):
    while True:
        asyncio.sleep(1)
        task = await queue.get()

        await processing(task)
...


worker_queue = asyncio.Queue()
w = asyncio.create_task(worker(worker_queue))

...

await worker_queue.put(task)

...
w.cancel()
await w