我一直在研究一个 python 程序,它基本上创建了 5 种不同类型的层次结构的对象。例如,我的程序可能会创建 1 个 Region 对象,其中包含 2000 个 Column 对象,其中包含 8000 个 Cell 对象(每列中有 4 个 Cell),其中所有对象都基于视频输入相互交互。
现在,我希望能够在视频输入在一段时间内更改它们的每个状态后保存所有对象状态。所以我的问题是如何有效地保存和重新加载 Python 中的数千个对象?提前致谢!
不确定 pickle 对于大规模的效率如何,但我认为您正在寻找的是object serialization。但是您是在尝试“刷新”这些对象中的信息还是保存并加载它们?另请阅读“外部对象的持久性”部分,因为您需要为关系/关联创建与每个对象关联的字母数字 ID。
一种完全 hacky 的方法也可能是对对象进行 json 化并存储。您仍然需要字母数字 id 或某种可用的标识符来关联每个对象。
你看过 Shelve、Pickle 或 cPickle 吗? http://docs.python.org/release/2.5/lib/persistence.html
我认为您需要查看ZODB。
ZODB是一个对象数据库,使用pickle序列化数据,非常擅长处理对象的层次结构,如果你的对象使用包含的persistent.Persistent
基类,将检测并只保存在你提交时更改的对象;例如,没有必要在每一个微小的变化上写出整个层次结构。
ZODB 项目中包含一个名为 的包BTrees
,该包支持 ZODB,可高效地将数千个对象存储在一个地方。将这些用于您的区域对象来存储列。我们有时使用 BTree 来存储数百万个数据点。