尝试在Celery中强制执行JSON序列化程序时,ContentDisallowed有关pickle的错误

时间:2015-03-09 06:53:11

标签: json serialization flask celery pickle

我在 tasks.py 中有以下内容,指定 json 应该用作Celery的默认序列化程序。

celery = Celery('app', broker = 'redis://localhost:6379/4')
from kombu import serialization
serialization.registry._decoders.pop("application/x-python-serialize")

celery.conf.update(
    CELERY_TASK_SERIALIZER = 'json',
    CELERY_RESULT_BACKEND  = 'redis://localhost:6379/4',
    CELERY_ACCEPT_CONTENT  = ['json'],
)

此外,在调用任务时,我将json序列化器指定为:

r = t1.apply_async(kwargs = {'msg': msg}, serializer = 'json')
r = t1.wait()

但是我仍然在调用t1.wait()的行中遇到以下错误,并在该行开始追溯。

  

ContentDisallowed:拒绝反序列化pickle类型的不受信任内容(application / x-python-serialize)

任务 t1 会引发不同类型的异常,但我会处理它们并尝试返回可辨认的值。

我正在使用Celery 3.1.17(Cipater)和Flask 0.10.1

那究竟是什么导致了这个错误呢?如果需要更多信息,请告诉我。

谢谢:)

1 个答案:

答案 0 :(得分:6)

要使用json,您需要指定

CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

看起来你不见了

CELERY_RESULT_SERIALIZER = 'json'