Как дождаться обработки очереди asyncio
Пустая очередь ещё не означает, что работа закончена: потребитель мог забрать элемент и продолжать его обработку. asyncio.Queue.join() ориентируется на число неподтверждённых задач, а не на количество элементов внутри очереди.
В схеме producer/consumer каждому успешному get() соответствует один task_done(). Подтверждение ставят после обработки, обычно в finally. Если подтверждать и неудачные задачи, join означает завершение учёта, а успех и повторную обработку нужно отслеживать отдельно.
maxsize ограничивает накопление: await put() ждёт, пока появится место. Для остановки потребителя можно отправить отдельный маркер, который тоже требует task_done(). Сам join работников не останавливает — после него нужно дождаться завершения их задач.
#python #asyncio
Post #5042
759
