为什么shelve不同步下面示例中的第二个键(world)?我要两次调用sync方法来更新数据--但它不会这样做--也不会引发异常。这是一种预期的行为吗?一般来说,我是否可以依赖同步来实现总是?
我将shelve作为一种选择,通过保存应用程序的状态(一个嵌套的对象)来减少“内存中”应用程序的加载时间。
另外,有人知道shelve.sync的时间复杂性是什么吗?在O(delta)中,detla是发生在深度嵌套对象上的更改吗?
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"])发布于 2020-04-16 03:36:06
writeback=True货架具有存储从缓存中检索到的对象的缓存。从缓存中检索到两次检索的元素,并且当货架关闭或同步时,缓存被用来将更改写回文件。
Shelf.sync()将所有缓存项写回磁盘上的文件,清除缓存。架子忘记了检索到的所有对象。对example的进一步更改不会反映在货架上,如果您在同步之后再次尝试检索d["example"],您将得到一个新的dict,而不是获取example。
它看起来不像有一个公共接口来同步更改而不刷新缓存。
此外,sync会重新对缓存中的每个条目进行重新筛选,而不管哪些项已经更改或没有更改(它不知道),并将新的泡菜写回磁盘。不管花多长时间。
https://stackoverflow.com/questions/61232475
复制相似问题