【问题标题】:Celery result encoding in RedisRedis 中的 Celery 结果编码
【发布时间】:2013-10-02 12:03:17
【问题描述】:

我在 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'

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

【问题讨论】:

    标签: redis celery


    【解决方案1】:

    默认情况下将结果腌制为 utf-8 字符串(参见任务 serializers)。您可以使用以下方法手动检查有效负载:

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

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

    【讨论】:

    • 像梦一样工作。谢谢!
    猜你喜欢
    • 2019-06-13
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2020-04-15
    • 2017-09-02
    • 2023-03-07
    • 2019-12-02
    相关资源
    最近更新 更多