你如何配置`celery`来使用序列化器'pickle'?
how do you configure `celery` to use serializer 'pickle'?
在tasks.py这边我是这样的:
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']
当我手动启动两个工人时,我通过:
celery --app tasks worker --concurrency=1 -n by_hand_1 &
sleep 5
celery --app tasks worker --concurrency=1 -n by_hand_2
我收到错误:
[ERROR/MainProcess] Refusing to deserialize disabled content of type pickle (application/x-python-serialize
如何配置 celery
以使用序列化程序 'pickle'?
p.s。关于“重复”,celery
框架发生了重大变化,自 4.0 版以来,默认序列化程序已从 pickle
更改为默认 json
... 所以这就是我问一个新问题的原因。
使用 MIME 类型配置应用程序似乎可以解决问题:
app.conf.task_serializer = 'pickle'
app.conf.result_serializer = 'pickle'
app.conf.accept_content = ['application/json', 'application/x-python-serialize']
以前我试图用 'pickle' 设置接受连接字段,但没有帮助。
p.s。这里有一些关于你是否需要 pickle 序列化器的更多注意事项:
- 如果你需要发送 json-non-serializable objects 那么你还需要配置任务序列化器 'pickle'
- 如果您的结果有 json-non-serializable objects 那么您需要将结果序列化程序配置为 'pickle'
- 将
accept_content
设置为上面的值意味着您可以发送 json
和 pickle
并且 celery
将在消息中看到类型 headers做正确的事
在tasks.py这边我是这样的:
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']
当我手动启动两个工人时,我通过:
celery --app tasks worker --concurrency=1 -n by_hand_1 &
sleep 5
celery --app tasks worker --concurrency=1 -n by_hand_2
我收到错误:
[ERROR/MainProcess] Refusing to deserialize disabled content of type pickle (application/x-python-serialize
如何配置 celery
以使用序列化程序 'pickle'?
p.s。关于“重复”,celery
框架发生了重大变化,自 4.0 版以来,默认序列化程序已从 pickle
更改为默认 json
... 所以这就是我问一个新问题的原因。
使用 MIME 类型配置应用程序似乎可以解决问题:
app.conf.task_serializer = 'pickle'
app.conf.result_serializer = 'pickle'
app.conf.accept_content = ['application/json', 'application/x-python-serialize']
以前我试图用 'pickle' 设置接受连接字段,但没有帮助。
p.s。这里有一些关于你是否需要 pickle 序列化器的更多注意事项:
- 如果你需要发送 json-non-serializable objects 那么你还需要配置任务序列化器 'pickle'
- 如果您的结果有 json-non-serializable objects 那么您需要将结果序列化程序配置为 'pickle'
- 将
accept_content
设置为上面的值意味着您可以发送json
和pickle
并且celery
将在消息中看到类型 headers做正确的事