Celery3 迁移到 celery4 遇到的问题

19 篇文章 10 订阅

今天将老项目中的 celery3 更新到 celery4。出现了一些问题,这里做一个记录,方便以后查看。如果有人也遇到同样的问题,可以作为参考,少走弯路。

更新

最简单的更新方式当然是pip, ;)

pip install -U celery==4.1.0

遇到的问题

1. kombu.exceptions.EncodeError: Object of type 'Message' is not JSON serializable


我的任务函数的参数是一个自定义的对象实例,4.0版本默认是使用 JSON 序列化的,而 JSON 支持的类型有限,不包括自定义类实例。

解决
task_serializer设置成 pickle

2. celery.exceptions.ImproperlyConfigured


版本4对很多配置的名称进行了变更,所以更改配置名称就可以了

报错提示:

Cannot mix new and old setting keys, please rename the
following settings to the new format:

CELERY_RESULT_BACKEND                -> result_backend

解决
CELERY_RESULT_BACKEND 配置名称修改为 result_backend

3. TypeError: can_read() got an unexpected keyword argument 'timeout'


这个问题不是celery 的问题,我项目里使用了redis作为消息中间件,这个问题是由于redis的版本问题导致的,我原来的版本是2.10.3,与celery4 不完全兼容。

解决

pip install -U redis==2.10.6

4. kombu.exceptions.ContentDisallowed: Refusing to deserialize untrusted content of type pickle (application/x-python-serialize)


默认情况下celery4不会接受pickle类型的消息,所以报这个错误

解决
accept_content 设置成 [‘pickle’] 就行了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值