You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Celery使用pickle序列化器解决反序列化拒绝错误

问题根因

Celery 4.0及以上版本为了规避pickle反序列化的安全漏洞,默认将pickle标记为不安全的序列化类型,即使代码中配置了各类序列化参数,worker启动时默认也会拦截pickle类型的内容反序列化。

正确配置方案

以下两种方式任选其一即可,也可以同时配置双重保证:

方式1:仅修改tasks.py配置代码

在现有配置基础上补充2行配置即可,完整配置如下:

app = Celery(
        main='tasks',
        backend='rpc://',
        broker='pyamqp://USERNAME:PASSWORD@localhost',
        )
app.conf.task_serializer = 'pickle'
app.conf.result_serializer = 'pickle'
app.conf.event_serializer = 'pickle'
app.conf.accept_content = ['pickle']
app.conf.task_accept_content = ['pickle']
app.conf.result_accept_content = ['pickle']
app.conf.event_accept_content = ['pickle']
# 新增以下2行配置
app.conf.worker_accept_content = ['pickle']
app.conf.allow_unsafe_serializers = True

方式2:启动worker时添加运行参数

不需要修改现有配置代码,直接在启动命令中添加允许pickle序列化的参数即可,修改后的启动命令如下:

celery --app tasks worker --concurrency=1 -n by_hand_1 --serializer=pickle --accept-content=pickle &
sleep 5
celery --app tasks worker --concurrency=1 -n by_hand_2 --serializer=pickle --accept-content=pickle

注意:pickle序列化存在反序列化远程代码执行的安全风险,仅在你完全信任所有任务提交方的环境中使用,对外公开服务不建议开启该配置。

内容的提问来源于stack exchange,提问作者Trevor Boyd Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:06:03