我一直在研究一个基本上创建5个不同类型的对象在层次结构中的python程序。例如,我的程序可能会创建1个包含2000个包含8000个Cell对象(每个列中有4个单元)的Column对象的Region对象,其中所有对象都基于视频输入相互交互。python对象保存并重新加载
现在,我希望能够在视频输入在一段时间内改变其每个状态后保存所有对象状态。所以我的问题是如何有效地保存和重新加载Python中的数千个对象?提前致谢!
我一直在研究一个基本上创建5个不同类型的对象在层次结构中的python程序。例如,我的程序可能会创建1个包含2000个包含8000个Cell对象(每个列中有4个单元)的Column对象的Region对象,其中所有对象都基于视频输入相互交互。python对象保存并重新加载
现在,我希望能够在视频输入在一段时间内改变其每个状态后保存所有对象状态。所以我的问题是如何有效地保存和重新加载Python中的数千个对象?提前致谢!
不知道如何有效的大规模泡菜,但我认为你要找的是object serialization。但是,您是否试图“刷新”这些对象中的信息或保存并加载它们?另请阅读'Persistence of External Objects'一节,因为您需要为关系/关联创建与每个对象关联的字母数字标识。
一个完全不好的方法也可能是json-ify对象并存储它。您仍然需要字母数字ID或某种可用的标识符来关联每个对象。
在另一个SO线程中还有'IgnacioVazquez-Abrams提到的'shelve':http://stackoverflow.com/a/12000115/1431750 – aneroid 2012-08-17 06:01:20
我想你需要看看ZODB。
ZODB是一个对象数据库,它使用pickle来序列化数据,非常善于处理对象的层次结构,并且如果对象使用包含的基类,将检测并仅保存提交时发生更改的对象;例如没有必要在每一个小的变化上写下整个层次结构。
包含在ZODB项目中的是一个名为BTrees
的包,它支持ZODB,可以将数千个对象存储在一个地方。将这些用于Region对象以存储列。我们使用BTrees来存储数百万个数据点。
你看过Shelve,Pickle或cPickle吗? http://docs.python.org/release/2.5/lib/persistence.html
高效或快速? – 2012-08-17 05:53:10