在django项目中经常须要有些耗时的任务,好比发送邮件、短信啥的,这种状况使用celery就很是有用了。celery有原生的也有第三方封装的django-celery,可是django-celery更新不及时,并且不支持celery4,这都出来两年了(看下commit 这两年半django-celery也没怎么提交新的代码), 若是你使用的是(<celery4.0)+(<=django1.8)能够考虑使用他不然请不要使用(2018.04.10是这样,当你看到的时候我不肯定有没有更新,请自行决定)。因为我使用的是django1.11版本因此我只能使用原生的celery
官方文档
1.安装html
pip install celery
2.broker,我这里使用的是redis,官方更推荐使用librabbitmq
python
pip install celery[redis]
3.django集成官方文档git
celery -A <proj_name> worker -l info
我这里报错提示Celery ValueError: not enough values to unpack (expected 3, got 0)
在issue里有这个问题的解决办法
4.1 pip安装eventletgithub
pip install eventlet
4.2 启动参数redis
celery -A <proj_name> worker -l info -P eventlet
5.关于序列化方式
在celery3.x 默认的序列化方式是pickle,但在celery4.x已经变成了json,json更为通用 问题也少,可是却不能序列化字节码,个人需求中出现了字节码序列化的要求因此必须修改一下配置django
CELERY_RESULT_SERIALIZER = 'pickle' CELERY_TASK_SERIALIZER = 'pickle' CELERY_ACCEPT_CONTENT = ['application/x-python-serialize']
celery的所有配置项json