Django项目中使用了旧版本的celery
,希望升级到最新版,在此记录最近今天的工作。
版本变更 3.1.23 -> 4.2.1
升级方案 参考官方文档
主要变化
- Django最低支持版本1.8
- 4.x是最后一个支持 python2 的大版本,5.0起不再支持
- 任务消息协议升级,且不向后兼容。旧版本的消息投递之后,新版本的worker将不能处理
- 配置名称建议使用小写,如
CELERY_DEFAULT_RATE_LIMIT
替换为task_default_rate_limit
。向后兼容,可以不修改 - 不再需要
djcelery
,这个在之前版本应该就是这样了
依赖项
-
djcelery 和
celery
4.x不再兼容,需要移除相关配置 -
raven
INSTALLED_APPS
去掉djcelery
后报错
Put 'djcelery' in your INSTALLED_APPS setting in order to use the sentry celery client.
目前看 raven
并没有直接引用 djcelery
包,可以按如下方式修改 INSTALLED_APPS
并升级到新版6.9.0

-
redis 如果broker选择的
redis
,需要将redis包升级到3.0.1,否则worker不能启动。 -
librabbitmq 和最新版的celery已经不兼容,不在使用。升级过程中出现worker不能启动的问题
通过修改
broker_url
可以规避。pyamqp
和librabbitmq
在 API 上是兼容的,因此可以直接切换
切换步骤
- 先将
celery
升级到3.1.25, 这一版提供了协议兼容,可以同时处理两种类型的协议 - code change 新版celery引用的方式发生了变化,参见文档
-
celery
升级到4.2.1,代码上线。如果有通过apply_async
启动的定时任务,上线时不要重启worker,确保消息在旧版的worker都处理完之后再重启
网友评论