gpt4 book ai didi

python - 使用来自非 python 的 pickle 二进制格式(使用 celery 和 rabbitmq)

转载 作者:太空狗 更新时间:2023-10-30 00:57:02 24 4
gpt4 key购买 nike

我正在使用 Python、Celery 和 RabbitMQ 从松散耦合的系统中生成消息。但是,我担心互操作性。

当直接从 Celery 生成的 RabbitMQ 检查消息负载时,我得到以下二进制格式:

Binary version of celery output

我强烈怀疑这是二进制 pickle 格式。但是,我在查找有关二进制 pickle 格式的一般信息时遇到了麻烦。

所以,我真的有几个问题:

  1. 这是二进制 pickle 格式吗?
  2. 有哪些资源可用于映射二进制格式?
  3. 鉴于 celery 实际上会生成 pickle 数据,如果我想使用来自非 python 使用者(例如 c++ 或 php)的消息,我可以使用哪些选项?
  4. 您是否有使用 Celery、RabbitMQ 以及与非 Python 的其他消费者进行互操作的经验?你对这个问题有什么建议吗?

提前致谢...

更新:

根据 Brendan 的建议,我将其切换为 JSON 序列化器:

add.apply_async(args=[10, 10], serializer="json")

供 future 搜索者引用,在这种特定的空情况下,JSON 格式似乎大了大约 15%(或 28 字节):

JSON serialized version from celery

另外,对于那些可能有兴趣阅读 c++ 的 pickle 格式的人,我发现这个问题很有帮助: How can I read a python pickle database/file from C?

更新 2:

根据 Asksol 的建议,我尝试了 zlib 压缩:

async_result = add.apply_async( (x, y), compression='zlib' )

我认为有一些有趣的结果,所以在这里:

Format comparison table

如您在此示例中所见,Pickle 格式比 JSON 小。然而,当压缩被添加到混合中时,压缩的 JSON 实际上比 Pickle 的任何一个版本都小。我也很好奇这两种格式的解析时间。虽然 JSON 是为提高解析器性能而设计的,但 Pickle 是基于偏移量的,这意味着它不必迭代。我想知道是否有人对这两种格式(有压缩和无压缩)进行了任何性能基准测试,并考虑了解析 CPU 时间。

最佳答案

According to the documentation ,您可以让 Celery 改用 JSON。我建议这样做,因为无论您使用哪种语言,它都是非常标准的。如果您使用大量二进制数据,则可能会增加消息的大小。

Data transferred between clients and workers needs to be serialized. The default serializer is pickle, but you can change this globally or for each individual task. There is built-in support for pickle, JSON, YAML and msgpack, and you can also add your own custom serializers by registering them into the Kombu serializer registry (see Kombu: Serialization of Data).

关于python - 使用来自非 python 的 pickle 二进制格式(使用 celery 和 rabbitmq),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12184460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com