在python中处理大型数组

在python中处理大型数组,python,memory,virtual-memory,Python,Memory,Virtual Memory,我的程序运行一个模拟,需要巨大的对象来存储数据。blob的大小大于2-3GB。即使我的MBP中应该有足够的内存,python(MacOSX上的Python2.7.3,来自ports)似乎无法全部使用,而且系统完全冻结 为了保存模拟的状态,我使用了pickle,但它也不适用于太大的对象,似乎pickle会在转储对象之前复制内存中的对象 问:是否有一个标准库可以处理庞大的python数据结构(dict、set、list),而不必一直将它们保存在内存中?或者,有没有办法强制python在虚拟内存中运行

我的程序运行一个模拟,需要巨大的对象来存储数据。blob的大小大于2-3GB。即使我的MBP中应该有足够的内存,python(MacOSX上的Python2.7.3,来自ports)似乎无法全部使用,而且系统完全冻结

为了保存模拟的状态,我使用了pickle,但它也不适用于太大的对象,似乎pickle会在转储对象之前复制内存中的对象

问:是否有一个标准库可以处理庞大的python数据结构(dict、set、list),而不必一直将它们保存在内存中?或者,有没有办法强制python在虚拟内存中运行?(我对numpy不是很熟悉,在这种情况下它能帮我吗?)


提前谢谢

如果您使用的是64位版本的Python,但仍然在使用
pickle
或其他内置模块时遇到问题,则可以将Python对象存储在面向对象的数据库中。我们每天都在处理大型对象(~10GB),并使用它。这不是最快的,但能完成任务


我还听说这可能是一个不错的选择。

您使用的是64位Python,对吗?您是否尝试过不将所有数据存储在对象中,而是将其作为文件保存在磁盘上,逐段读取并分步处理?我知道这对您没有帮助,但我昨天晚上刚刚举了一个例子,有一个6G大的元组列表,python能够处理任何问题,这里是MacOS 10.8。所以我想这不是我的问题。我的机器总共有20G内存。@OdayMansour:是的,这是我重写代码的替代解决方案。但是如果这个问题已有解决方案,我想避免它。@DavidHeffernan:是的,谢谢,我会试试这个ZODB。在发布此问题之前,我最后的希望是cPickle,但它似乎与标准python实现存在相同的问题。ZODB似乎解决了我的问题,尽管只有在明天计算成功结束时,我才会真正感到高兴。:)