在以下示例中,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"])
writeback=True
架子具有一个高速缓存,用于存储从高速缓存中检索到的对象。从缓存中检索两次检索到的元素,并且在关闭或同步架子时,缓存用于将更改写回到文件中。Shelf.sync()
将所有缓存条目写回到磁盘上的文件,然后
清除缓存。架子会忘记所有检索到的对象。对d
的进一步更改将不会反映在架子中,并且如果您尝试在同步后再次检索d["example"]
,则会从架子上重建一个新的dict,而不是获取d
。
sync
重新修改缓存中的每个条目,无论发生了什么变化或没有发生变化(都不知道),然后将新的泡菜写回到磁盘上。但是要花很长时间。