Выбор ответа Senior Celery и очереди обновлено

Fan-out из миллиона задач

Вопрос

Нужно обработать 1 млн строк: код в одной задаче ставит по задаче на строку через цикл .delay(). Чем это плохо и как лучше?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Миллион сообщений перегружает брокер; лучше пачки по сотням строк на задачу. Каждое сообщение это сериализация, сетевой вызов, подтверждение и учёт результата.

Варианты ответа

  1. Celery не позволяет ставить задачи из задач, и цикл упадёт на первом .delay()
  2. Миллион сообщений перегружает брокер; лучше пачки по сотням строк на задачуправильный ответ
  3. Так задачи выполнятся строго последовательно в том же воркере, без параллелизма
  4. Это лучший вариант: мелкие задачи равномерно распределяются по всем воркерам

Разбор

Каждое сообщение это сериализация, сетевой вызов, подтверждение и учёт результата. Миллион задач по миллисекунде работы тратят больше на накладные расходы, чем на дело, и раздувают очередь. Обработка пачками (chunks или свои батчи по id) сокращает число сообщений на порядки. Ставить задачи из задач можно, и выполняются они параллельно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.