1

我在 Ubuntu 机器上使用 RabbitMQ 代理在 celery 中调用任务,但只是使用 Redis 作为结果后端进行设置。我可以找到任务结果,但它们看起来像 ""\x80\x02}q\x01(U\x06statusq\x02U\aSUCCESSq\x03U\ttracebackq\x04NU\x06resultq\x05}q\x06(X\x06\x00\x00 \x00result}q\a(X\x06\x00\x00\x00statusK\x01X\r\x00\x00\x00total_resultsM\xf4\x01X\a\x00\x00\x00matches]q\b(}q\t(X\ a\x00\x00\x00players]q\n(}q\x0b(X\a\x00\x00\x00hero_idK\x15X\n\x00\x00\x00account_idI4294967295\nX\x0b\x00\x00\x00player_slotK\x00u}q \x0c(X\a\x00\x00\x00hero_idK\x0cX\n\x00\x00\x00account_idI4294967295\nX\x0b\x00\x00\x00player_slotK\x01u}q\r(X\a\x00\x00\x00hero_idK\x1bX \n\x00\x00\x00account_i...."

我的默认 celery 编码是 ASCII,而 Redis 似乎没有在其基本配置中指定编码。

utils.encoding.default_encoding()
'ascii'

我应该如何将这段文字变成有意义的东西?我不知道这是如何在视觉上编码的。任何建议的解码尝试?

4

1 回答 1

3

结果默认被腌制为 utf-8 字符串(请参阅任务序列化程序)。您可以使用以下方法手动检查有效负载:

import pickle
s = "\x80\x02}q..."
obj = pickle.loads(s)
print obj

pickle除非您在多语言环境中操作,否则通常没问题,然后 JSON 或 msgpack 是很好的解决方案。

于 2013-10-02T04:03:17.367 回答