Выбор ответа Middle GIL, потоки и процессы обновлено
Производитель и потребитель
Вопрос
Какой инструмент стандартной библиотеки лучше подходит для передачи задач от потока-производителя нескольким потокам-потребителям?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: queue.Queue: потокобезопасная, с блокирующими get и put. queue.Queue внутри использует блокировки и условия, потребители спят на get() и просыпаются при появлении задачи, а maxsize даёт обратное давление.
Варианты ответа
queue.Queue: потокобезопасная, с блокирующимиgetиputправильный ответ- Обычный
listсappendиpop(0), операции атомарны под GIL collections.Counterсо счётчиком задач на каждый поток- Глобальная переменная с последней задачей и флагом готовности
Разбор
queue.Queue внутри использует блокировки и условия, потребители спят на get() и просыпаются при появлении задачи, а maxsize даёт обратное давление. Список без блокировок не даёт ожидания и сигнализации, pop(0) к тому же O(n). Глобальная переменная потеряет задачи.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.