Как настроить TASK_SERIALIZER с джанго-сельдереем - PullRequest
6 голосов
/ 08 июля 2011

Я использую django-celery, и я хотел бы установить TASK_SERIALIZER в JSON вместо pickle.

Я могу сделать это для каждого метода отдельно, изменив мои декораторы задач с

@task

до

@task(serializer="json")

Но я бы хотел сделать это глобально.Настройка

TASK_SERIALIZER="json"

в settings.py не работает.Попытка запустить

import celery
celery.conf.TASK_SERIALIZER="json"

(как подразумевается здесь ) приводит к

AttributeError: 'module' object has no attribute 'conf'

Есть идеи, как настроить этот параметр при запуске сельдерея через django?

Ответы [ 3 ]

22 голосов
/ 09 июля 2011

Разобрался.

В settings.py вам нужно установить

CELERY_TASK_SERIALIZER = "json"

Документы сбивают с толку, по крайней мере мне.

5 голосов
/ 25 мая 2013

Я обнаружил, что создание файла celeryconfig (как рекомендует документация) делает вещи намного чище.

celeryconfig.py

# Celery configuration file
BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'America/Los_Angeles'
CELERY_ENABLE_UTC = True

Вы можете отправить его с помощью этой команды (один разВы звоните из сельдерея)

celery.config_from_object('celeryconfig')
1 голос
/ 13 ноября 2013

Из документа :

Для сообщений о задачах вы можете установить настройку CELERY_TASK_SERIALIZER на «JSON» или «YAML» вместо рассола. Там в настоящее время нет альтернативное решение для результатов задачи (но написание собственного результата бэкэнд с использованием JSON - простая задача)

Так что настройка CELERY_RESULT_SERIALIZER = "json" выглядит бесполезной. В моем случае, результаты все еще в рассоле (Celery 3.1.3). Да уж. Я знаю ...

...