2012-12-27 73 views
2

我的程序运行一个模拟,需要巨大的对象来存储数据。blob的大小大于2-3GB。尽管我的MBP中应该有足够的内存,python(Mac OS X上的Python 2.7.3,来自端口)似乎无法使用它,系统完全冻结。在python中处理巨大的数组

要保存模拟的状态,我用泡菜,但也不会为过大对象的工作,它好像泡菜将倾之前复制在内存中的对象...

问题:是否有一个标准库可以处理巨大的Python数据结构(字典,集合,列表),而不需要一直保存在内存中?或者,有没有办法强制Python在虚拟内存中运行? (我对numpy不是很熟悉,会在这种情况下帮助我吗?)

在此先感谢!

+1

您正在使用64位Python吗? –

+0

您是否尝试过不将所有数据存储在一个对象中,而是将其保存为磁盘上的文件并逐个读取并逐步执行处理? –

+0

我知道它并没有帮助你,但我昨天晚上用了一个6G元组列表的例子,python能够处理没问题,MacOS 10.8在这里。所以这不是拉力python的问题,我猜。我的机器有20G的总内存。 – favoretti

回答

2

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

我也听说dobbin可能是一个很好的选择。

+0

谢谢,我会试试这个ZODB。在发布这个问题之前,我最后的希望是cPickle,但它似乎和标准的python实现一样存在相同的问题。 – Mkoch

+0

ZODB似乎已经解决了我的问题,尽管明天当计算成功结束时我才会真正开心。 :) – Mkoch