2011-07-08 3 views
4

J'utilise django-céleri et je voudrais définir le TASK_SERIALIZER à JSON au lieu de cornichon.Comment configurer TASK_SERIALIZER avec django-céleri

Je peux faire cela sur une base par méthode en changeant mes décorateurs de travail de

@task 

à

@task(serializer="json") 

Mais je voudrais le faire à l'échelle mondiale. Paramètre

TASK_SERIALIZER="json" 

dans settings.py ne fonctionne pas. Essayer de lancer

import celery 
celery.conf.TASK_SERIALIZER="json" 

(comme le laisse entendre) here résultats dans

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

Toute idée comment configurer ce paramètre lorsque le céleri en cours d'exécution par django?

Répondre

18

Compris.

En settings.py vous devez définir

CELERY_TASK_SERIALIZER = "json" 

Docs sont confus, au moins pour moi.

+10

+1 pour les documents confus. – Dave

5

J'ai trouvé que la création d'un fichier celeryconfig (comme le recommandent les docs) rend les choses beaucoup plus propres.

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 

Vous pouvez le mettre en ENVOYÉ avec cette commande (une fois que vous appelez Céleri)

celery.config_from_object('celeryconfig') 
1

De l'doc:

Pour les messages de tâche que vous pouvez définir le paramètre CELERY_TASK_SERIALIZER sur sur "json" ou "yaml" au lieu de cornichon. Il n'y a pas solution alternative pour les résultats de la tâche (mais l'écriture d'un back-end résultat personnalisé à l'aide JSON est une tâche simple)

mise donc CELERY_RESULT_SERIALIZER = "json" semble inutile. Dans mon cas, les résultats sont toujours en pickle (céleri 3.1.3). Ouais. Je sais ...

+2

Il semble que vous pouvez maintenant spécifier un sérialiseur de résultats: http://celery.readthedocs.org/en/latest/configuration.html#celery-result-serializer - il semblerait que d'autres parties de la documentation n'ont pas été mises à jour pour refléter ceci .... tirer la demande envoyée – scytale

Questions connexes