如何让 Celery 返回 json 对象而不是 bytea?



这是我第一次在Python 3中使用Celery。为了弄湿我的脚,我从工人那里返回了一个字符串"这是一个你好任务",并将其存储为Postgres数据库。当我从我的数据库访问结果时,它以 Python 中的内存视图的形式出现,并且数据库本身有一个 celery_taskmeta 的结果列作为数据类型 bytea(这也是 Celery 发送到数据库的内容)。

这是我的芹菜配置:

import os
broker_url = os.environ.get('RABBITMQ_BIGWIG_TX_URL')
worker_concurrency = 3
result_backend = 'db+postgres://...'
task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']

为什么我没有获得存储在数据库中的 json 结果?另外,我无法将bytea解码为json或utf-8文本,出现此错误:

以下是它以字节为单位的样子:b'x80x04x95x1bx00x00x00x00x00x00x00x8cx17"this was a hello task"x94.'

命令:json.loads(t.tobytes())

结果:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

您需要将字节数据转换为Unicode

t.decode("utf-8")

你需要用泡菜加载它。

import pickle
pickle.loads(t, encoding='utf-8')

我自己也在为此苦苦挣扎,试图让 Celery 将结果存储在 DB JSON 序列化而不是腌制中。

相关内容

  • 没有找到相关文章

最新更新