Hom*_*er6 5 python pickle rabbitmq celery
我正在使用Python,Celery和RabbitMQ来生成来自松散耦合系统的消息.但是,我担心互操作性.
当直接从RabbitMQ检查消息有效负载时,由celery生成,我得到以下二进制格式:

我强烈怀疑这是一种二元泡菜格式.但是,我很难找到关于二元泡菜格式的信息.
所以,我真的有几个问题:
提前致谢...
更新:
根据Brendan的建议,我已将其切换为JSON序列化程序:
add.apply_async(args=[10, 10], serializer="json")
Run Code Online (Sandbox Code Playgroud)
作为未来搜索者的参考,似乎JSON格式在这个特定的空案例中大约增加了15%(或28个字节):

另外,对于那些可能有兴趣从c ++阅读pickle格式的人,我发现这个问题很有用: 如何从C读取python pickle数据库/文件?
更新2:
根据Asksol的建议,我试用了zlib压缩:
async_result = add.apply_async( (x, y), compression='zlib' )
Run Code Online (Sandbox Code Playgroud)
我认为有一些有趣的结果,所以这里是:

正如您在此示例中所看到的,Pickle格式小于JSON.但是,当压缩添加到混合中时,压缩的JSON实际上小于任何版本的Pickle.我也很好奇这两种格式的解析时间.虽然JSON旨在解析性能,但Pickle基于偏移,这意味着它不必迭代.我想知道是否有人在这两种格式上做过任何性能基准测试,包括压缩和不压缩,并考虑解析CPU时间.
根据文档,您可以使Celery使用JSON.我推荐这样做,因为它非常标准,无论你使用什么语言.如果使用大量二进制数据,则可能会增加消息的大小.
客户和工作人员之间传输的数据需要序列化.默认的序列化程序是pickle,但您可以在全局或每个单独的任务中更改它.有pickle,JSON,YAML和msgpack的内置支持,您还可以通过将它们注册到Kombu序列化程序注册表中来添加您自己的自定义序列化程序(请参阅Kombu:数据序列化).
| 归档时间: |
|
| 查看次数: |
2764 次 |
| 最近记录: |