Выбор ответа Junior Celery и очереди спрашивают часто обновлено

Что передавать в задачу Celery

Вопрос

Почему в задачу передают order.id, а не объект order?

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

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

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

Коротко

Правильный ответ: Объект к выполнению устареет, а JSON-сериализатор его не примет. Сообщение в брокере это сериализованные аргументы.

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

  1. Celery синтаксически запрещает передавать в delay объекты моделей
  2. Так задача выполнится быстрее: воркеру не нужно разбирать большой объект
  3. Объект нельзя передать в другой процесс без deepcopy и регистрации класса
  4. Объект к выполнению устареет, а JSON-сериализатор его не приметправильный ответ

Разбор

Сообщение в брокере это сериализованные аргументы. ORM-объект с pickle потянет устаревшее состояние (статус, сумму), а с json, который в Celery по умолчанию, просто не сериализуется. С id задача загрузит актуальные данные в момент выполнения. Синтаксического запрета нет, а скорость тут вторична.

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

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