为什么shelve.sync无法按预期工作?

问题描述 投票:0回答:1

在以下示例中,shelve为什么不同步第二个键(world)?我两次调用sync方法来更新数据-但它不这样做-也不引发异常。这是预期的行为吗?通常,我可以依靠同步来进行[[always吗?

我正在评估shelve作为通过保存应用程序的状态(深度嵌套的对象)来减少“内存中”应用程序的加载时间的选项。

而且,有人知道shelve.sync的时间复杂度是多少?是O(delta),其中detla是发生在深层嵌套对象上的

changes吗?

import shelve example = {} d = shelve.open("shelve.db", writeback=True) d["example"] = example example["hello"] = "hello" d.sync() example["world"] = "world" d.sync() d.close() d = shelve.open("shelve.db", writeback=True) print(d["example"]["hello"]) print(d["example"]["world"])
python shelve
1个回答
0
投票
writeback=True架子具有一个高速缓存,用于存储从高速缓存中检索到的对象。从缓存中检索两次检索到的元素,并且在关闭或同步架子时,缓存用于将更改写回到文件中。

Shelf.sync()将所有缓存条目写回到磁盘上的文件,然后

清除缓存。架子会忘记所有检索到的对象。对d的进一步更改将不会反映在架子中,并且如果您尝试在同步后再次检索d["example"],则会从架子上重建一个新的dict,而不是获取d

看起来好像没有公共接口来同步更改而不刷新缓存。


此外,sync重新修改缓存中的每个条目,无论发生了什么变化或没有发生变化(都不知道),然后将新的泡菜写回到磁盘上。但是要花很长时间。
© www.soinside.com 2019 - 2024. All rights reserved.