Asyncio Queue, Lock и Semaphore: задачи на очереди и воркеров
Очередь позволяет отделить поступление работы от её обработки, но добавляет собственные ошибки: забытый task_done, потерянный воркер или бесконечное ожидание join. В этих задачах вы соберёте ограниченный конвейер, объедините парные события и организуете запасную очередь при перегрузке. Есть упражнения на вытеснение старой заявки и восстановление пула после сбоя. Начните с вопроса о гонке в однопоточном asyncio, чтобы не путать отсутствие потоков с отсутствием конкуренции.
Как заниматься
10 заданий ниже можно проходить по порядку или выбирать нужную проблему. В заданиях на код есть проверка решения; в вопросах — проверка выбранного ответа. Требования к реализации и примеры приведены на страницах заданий.
Вся практика собрана в бесплатном большом задачнике по Python для разработчиков.
Смежная практика
- Race condition в asyncio: почему однопоточность не защищает счётчик
Race condition в asyncio: почему однопоточность не защищает счётчик. Вопрос с проверкой ответа.
Практический Python для разработчиков: большой задачник - Asyncio Queue и Semaphore: конвейер с ограничением нагрузки
Asyncio Queue и Semaphore: конвейер с ограничением нагрузки. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник - Asyncio Queue: вытеснение старейшей заявки без блокировки поставщика
Asyncio Queue: вытеснение старейшей заявки без блокировки поставщика. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник - Asyncio Lock и Semaphore: учёт результатов обработки контейнеров
Asyncio Lock и Semaphore: учёт результатов обработки контейнеров. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник - Asyncio: восстановление пула воркеров после ошибки
Asyncio: восстановление пула воркеров после ошибки. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник - Asyncio Queue: объединение парных событий по идентификатору
Asyncio Queue: объединение парных событий по идентификатору. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник - Asyncio: две очереди с приоритетом и общим семафором
Asyncio: две очереди с приоритетом и общим семафором. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник - Почему зависает asyncio.Queue.join(): аудит вызовов taskdone
Почему зависает asyncio.Queue.join(): аудит вызовов taskdone. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник - Asyncio Queue: резервная очередь при перегрузке основного конвейера
Asyncio Queue: резервная очередь при перегрузке основного конвейера. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник - Asyncio Queue: обработка ошибок воркеров и подтверждение taskdone
Asyncio Queue: обработка ошибок воркеров и подтверждение taskdone. Задача с проверкой Python-кода.
Практический Python для разработчиков: большой задачник
