使用"application/x-python-serialize"而不是"application/json"的Celery。



我正在使用celery模块 v。3.1.25 在Python 2.7和Windows 10中运行芹菜工人。结果必须返回在json中编码的,而不是pickle

问题:当工人返回任务的结果时,RabbitMQ Management控制台将结果显示为content_type: application/x-python-serialize。为什么将task_serializerresult_serializeraccept_content设置为json

时,为什么仍将x-python-serialize

proj/celery.py

from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('tasks', 
    broker='amqp://test:test@192.168.1.26:5672//',    # running in Win10 VM
    backend='amqp://',
    task_serializer='json',
    result_serializer='json',
    accept_content=['application/json'],
    include=['proj.tasks'])

proj/tasks.py

from __future__ import absolute_import, unicode_literals
from .celery import app
@app.task
def myTask():
    ...
    return ...

工人开始使用

celery -A proj worker --loglevel=info

并发出有关泡菜序列化器的警告

Starting from version 3.2 Celery will refuse to accept pickle by default.
The pickle serializer is a security concern as it may give attackers
the ability to execute any command.  It's important to secure
your broker from unauthorized access when using pickle, so we think
that enabling pickle should require a deliberate action and not be
the default choice.
If you depend on pickle then you should set a setting to disable this
warning and to be sure that everything will continue working
when you upgrade to Celery 3.2::
    CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']
You must only enable the serializers that you will actually use.

  warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED))
 -------------- celery@Y-PC v3.1.25 (Cipater)
---- **** -----
--- * ***  * -- Windows-10-10.0.14393
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x40ffeb8
- ** ---------- .> transport:   amqp://test:**@192.168.1.26:5672//
- ** ---------- .> results:     amqp://
- *** --- * --- .> concurrency: 12 (prefork)
-- ******* ----
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery

将您的Celery((配置参数更改为accept_content=['json'],而不是application/json

是否有帮助

相关内容

  • 没有找到相关文章

最新更新