Celery 默认拒绝接收 pickle,应该禁用吗?

6 投票
1 回答
14018 浏览
提问于 2025-04-18 01:32

我刚刚设置了我的第一个Celery实例,现在收到警告,建议我出于安全考虑禁用pickle作为序列化工具。禁用它会有什么后果?Celery到底需要这个序列化工具来做什么呢?

如果你依赖于pickle,那么你应该设置一个选项来禁用这个警告,并确保在升级到Celery 3.2时一切仍然能正常工作:

CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']

1 个回答

6

来自 http://celery.readthedocs.org/en/latest/faq.html#is-celery-dependent-on-pickle 的内容:

默认的序列化格式是 pickle,因为它很方便(它支持将复杂的 Python 对象作为任务参数发送)。

无论你是否使用 pickle,你可能想通过设置 CELERY_ACCEPT_CONTENT 配置变量来关闭这个警告。

如果你在任务中不使用 Python 对象作为参数,建议使用更安全的序列化格式,比如 json。

pickle 的另一个限制是无法获取任务结果 - 详情见 http://docs.celeryproject.org/en/latest/faq.html#isn-t-using-pickle-a-security-concern

对于任务消息,你可以将 CELERY_TASK_SERIALIZER 设置为 “json” 或 “yaml”,而不是使用 pickle。目前没有其他解决方案来处理任务结果(但使用 JSON 编写自定义结果后端是个简单的任务)。

撰写回答