首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何才能使大型python数据结构更高效地解锁?

如何才能使大型python数据结构更高效地解锁?
EN

Stack Overflow用户
提问于 2011-02-23 02:46:40
回答 1查看 2.5K关注 0票数 2

我有一个大约170万个" token“对象的列表,以及一个大约130,000个"structure”对象的列表,这些对象引用token对象并将它们分组到结构中。在好的情况下,它有大约800MB的内存。

我使用__slots__来减少内存占用,所以我的__getstate__返回一个可序列化的值的元组,__setstate__会把它放回原处。我也没有挑选所有的实例数据,只有5项用于标记,7-9项用于结构,所有字符串或整数。

当然,我使用的是cPickle和HIGHEST_PROTOCOL,恰好是2(Python2.6)。生成的pickle文件大约为120MB。

在我的开发机器上,解开泡菜需要大约2分钟。我想让它更快些。除了更快的硬件和我已经在做的事情之外,我还可以使用哪些方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-23 02:55:37

Pickle不是存储大量相似数据的最佳方法。对于大型数据集,它可能会很慢,更重要的是,它非常脆弱:围绕源进行更改很容易破坏所有现有的数据集。(我建议您阅读它的核心部分:一堆字节码表达式。它会吓到您考虑其他数据存储/检索方法。)

您应该考虑使用PyTables,它使用HDF5 (跨平台和一切)来存储任意大量的数据。您甚至不必立即将文件中的所有内容加载到内存中;您可以分段访问它。您所描述的结构听起来非常适合“表”对象,该对象具有设置字段结构(由固定长度的字符串、整数、小Numpy数组等组成)。并且可以非常有效地持有大量的数据。对于存储元数据,我建议使用表的._v_attrs属性。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5082451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档