Могу ли я использовать классы данных (или аналогичные) в качестве аргументов и возвращаемых значений для задач Celery? - PullRequest
0 голосов
/ 21 ноября 2018

По умолчанию аргументы задач Celery могут принимать примитивные типы, списки и дикты в качестве аргументов и возвращаемых значений.

Но что если я захочу отправить и вернуть более сложные значения?Я хотел бы использовать что-то вроде классов данных Python 3.7 в качестве аргументов и возвращаемых значений.Поскольку я использую Python 3.6, я использую бэкпорт класса данных, но из того, что я могу сказать, это почти то же самое.

Когда я пытаюсь отправить или вернуть экземпляр класса данных, я получаю ошибкучто объект не является сериализуемым JSON ... это правильно: сериализатор JSON не знает, как справиться с чем-либо подобным.

Так что есть способ использовать собственный сериализатор JSON, который может обрабатывать класс данныхэкземпляры в качестве аргументов и возвращаемых значений?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете сделать одну из двух вещей: (1) Вы можете использовать сериализатор pickle для сельдерея , установив настройку task_serializer или (2) написать свой собственный набор сериализации/ функции десериализации для json .Пример по ссылке выше может показать вам, как написать свой собственный сериализатор.

nb, использование pickle действительно имеет некоторые проблемы с безопасностью, но это должно подойти, если у вас есть только надежные производители.

...