Передавайте стабильный ID и минимальные сериализуемые параметры, а ORM-объект загружайте в worker. Объект может быть тяжёлым, устаревшим и связанным с уже закрытой сессией.
Почему в Celery не рекомендуется передавать тяжёлые ORM-объекты в качестве аргументов задачи? Чем это заменить?
Передавайте стабильный ID и минимальные сериализуемые параметры, а ORM-объект загружайте в worker. Объект может быть тяжёлым, устаревшим и связанным с уже закрытой сессией.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Передавайте стабильный ID и минимальные сериализуемые параметры, а ORM-объект загружайте в worker. Объект может быть тяжёлым, устаревшим и связанным с уже закрытой сессией.
Поставку задачи согласуйте с commit транзакции, иначе worker может не увидеть ещё не сохранённую запись. Учитывайте удаление или изменение объекта между постановкой и выполнением. Если важны именно исходные данные, передайте небольшой версионированный snapshot, а не весь внутренний ORM-граф. Не используйте небезопасную сериализацию ради удобства; повторное выполнение должно иметь понятную идемпотентность.