如何在django-celery中配置TASK_SERIALIZER
我正在使用django-celery,想把 TASK_SERIALIZER
设置为JSON,而不是默认的pickle。
我可以通过逐个修改我的任务装饰器来实现这一点,从
@task
改成
@task(serializer="json")
但是我想全局设置这个选项。在 settings.py
中设置
TASK_SERIALIZER="json"
并没有效果。尝试运行
import celery
celery.conf.TASK_SERIALIZER="json"
(正如这里所暗示的)结果是
AttributeError: 'module' object has no attribute 'conf'
有没有什么办法可以在通过django运行celery时配置这个设置?
3 个回答
1
来自文档的内容:
对于任务消息,你可以把CELERY_TASK_SERIALIZER设置为“json”或“yaml”,而不是使用pickle。目前对于任务结果没有其他解决方案(不过用JSON写一个自定义的结果后端其实很简单)。
所以设置CELERY_RESULT_SERIALIZER = "json"
看起来没什么用。在我的情况下,结果仍然是pickle格式(Celery 3.1.3)。是的,我知道……
6
我发现创建一个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')
24
我搞明白了。
在 settings.py
文件里,你需要设置
CELERY_TASK_SERIALIZER = "json"
文档有点让人困惑,至少对我来说是这样。