我正在使用django-celery,我想将TASK_SERIALIZER
设置为JSON而不是pickle。
我可以通过从
更改任务装饰器来逐个方法地完成此操作@task
到
@task(serializer="json")
但我想全球范围内这样做。设置
TASK_SERIALIZER="json"
settings.py
中的不起作用。试图运行
import celery
celery.conf.TASK_SERIALIZER="json"
(如暗示here)导致
AttributeError: 'module' object has no attribute 'conf'
在通过django运行芹菜时,知道如何配置此设置吗?
答案 0 :(得分:22)
想出来。
在settings.py
中,您需要设置
CELERY_TASK_SERIALIZER = "json"
文档令人困惑,至少对我而言。
答案 1 :(得分:5)
我发现创建一个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)
celery.config_from_object('celeryconfig')
答案 2 :(得分:1)
来自doc:
对于任务消息,您可以设置CELERY_TASK_SERIALIZER设置 “json”或“yaml”而不是pickle。目前没有 任务结果的替代解决方案(但编写自定义结果 使用JSON的后端是一个简单的任务)
因此设置CELERY_RESULT_SERIALIZER = "json"
看起来毫无用处。就我而言,结果仍然是咸菜(Celery 3.1.3)。是啊。我知道......