【问题标题】:Need a robust, efficient Python serializer需要一个健壮、高效的 Python 序列化程序
【发布时间】:2016-04-06 23:53:48
【问题描述】:

我正在尝试序列化具有混合数据类型的 Python 对象——原生 Python、numpy、内置 Python 的子类。 Pickle 和 cPickle 足够强大,可以处理所有数据类型,但我达到了大小限制(>300MB);我知道这一点,因为在加载腌制对象时,我看不到完整的对象被序列化。寻找一个更有效的替代 cPickle 我尝试了以下方法,但对数据类型没有任何作用:json、simplejson、json 的自定义子类,用于将 numpy 类型转换为本机 Python、marshal(不处理内置的子类类型,例如 defaultdict)、MessagePack。你有什么建议吗?提前致谢!

【问题讨论】:

  • 大小限制? pickle 协议和实现有一些限制,但我认为在 300 MB 标记附近没有任何大小限制。你能给出一些简单的、可运行的示例代码来构造一个巨大的对象,对其进行腌制和取消腌制,从而使取消腌制的结果与原始对象不匹配吗?
  • @lordingtar 是的,但它无法处理一些自定义数据类型。

标签: python json serialization pickle


【解决方案1】:

根据您要序列化的为什么,我强烈建议您查看Protocol Buffer API

协议缓冲区是 Google 用于序列化结构化数据的语言中立、平台中立、可扩展的机制——想想 XML,但更小、更快、更简单。您只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码轻松地在各种数据流中以及使用各种语言写入和读取结构化数据。

如果这听起来符合您的意图,我建议您花时间阅读他们的所有文档。

甚至还有Python specific tutorial

【讨论】:

  • 谢谢,我试图避免实现整个 API 的开销,但这可能是必要的。为什么会超过Cap'n Proto
  • 主要是因为我还没有听说过 Cap'n Proto :)
猜你喜欢
  • 2013-02-27
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
相关资源
最近更新 更多