您的位置:首页 > 其它

Celery3 迁移到 celery4 遇到的问题

2017-11-24 11:35 766 查看
今天将老项目中的
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’] 就行了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: