在Python 2.7中序列化超过4千兆字节的对象有哪些选项?

时间:2015-11-12 22:27:44

标签: python arrays python-2.7 numpy serialization

我在这里使用Python非常重要,而且它是Python 2.7。

我们正在序列化超过4千兆字节的NumPy数组(意思是,字节数超过4 Gb,数据本身可能是1千兆浮点数或其他东西),而Python 2.7不支持像4这样的对象的腌制GB。使用字符串显示更容易(作为酸洗NumPy数组的一部分,pickle实际上使用字符串):

>>> huge_string = "*" * (2**33)  # 8 Gig
>>> import cPickle
>>> a = cPickle.dumps(huge_string, 2)
'\x80\x02U\x00q\x01.'
>>> print len(a)
6

字符串绝对不超过8 Gig。

我知道Python 3.4及以上版本会支持这一点。    https://bugs.python.org/issue11564

我的两个问题:

  1. Python社区是否会将BININT8解决方案从Python 3.4 / Python 3.5反向移植到Python 2.7? (它似乎不是在Fedora 22上的Python 2.7.10中)
  2. 是否有其他方法可以在Python大型NumPy阵列中进行序列化?

1 个答案:

答案 0 :(得分:0)

感谢大家的回复。

似乎有三种选择(我仍然希望听到Python社区是否会将Python 3.x解决方案向后移植到Python 2.7):

  1. NumPy has it's own serialization(感谢user2367112)
  2. HDF5(感谢ali_m)
  3. PicklingTools OC Serialization(工作伙伴)
  4. 我们最终使用了PicklingTools OC。感谢大家的回复!