Fan-out из миллиона задач
Вопрос
Нужно обработать 1 млн строк: код в одной задаче ставит по задаче на строку через цикл .delay(). Чем это плохо и как лучше?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Celery не позволяет ставить задачи из задач, и цикл упадёт на первом
.delay() - Миллион сообщений перегружает брокер; лучше пачки по сотням строк на задачуправильный ответ
- Так задачи выполнятся строго последовательно в том же воркере, без параллелизма
- Это лучший вариант: мелкие задачи равномерно распределяются по всем воркерам
Разбор
Каждое сообщение это сериализация, сетевой вызов, подтверждение и учёт результата. Миллион задач по миллисекунде работы тратят больше на накладные расходы, чем на дело, и раздувают очередь. Обработка пачками (chunks или свои батчи по id) сокращает число сообщений на порядки. Ставить задачи из задач можно, и выполняются они параллельно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Сколько экземпляров beat запускать
Следующий вопрос
Экспоненциальная задержка с джиттером