Выбор ответа Junior Celery и очереди спрашивают часто обновлено
Что передавать в задачу Celery
Вопрос
Почему в задачу передают order.id, а не объект order?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Объект к выполнению устареет, а JSON-сериализатор его не примет. Сообщение в брокере это сериализованные аргументы.
Варианты ответа
- Celery синтаксически запрещает передавать в
delayобъекты моделей - Так задача выполнится быстрее: воркеру не нужно разбирать большой объект
- Объект нельзя передать в другой процесс без
deepcopyи регистрации класса - Объект к выполнению устареет, а JSON-сериализатор его не приметправильный ответ
Разбор
Сообщение в брокере это сериализованные аргументы. ORM-объект с pickle потянет устаревшее состояние (статус, сумму), а с json, который в Celery по умолчанию, просто не сериализуется. С id задача загрузит актуальные данные в момент выполнения. Синтаксического запрета нет, а скорость тут вторична.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.