首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么shelve.sync不像预期的那样工作?

为什么shelve.sync不像预期的那样工作?
EN

Stack Overflow用户
提问于 2020-04-15 15:25:11
回答 1查看 344关注 0票数 1

为什么shelve不同步下面示例中的第二个键(world)?我要两次调用sync方法来更新数据--但它不会这样做--也不会引发异常。这是一种预期的行为吗?一般来说,我是否可以依赖同步来实现总是

我将shelve作为一种选择,通过保存应用程序的状态(一个嵌套的对象)来减少“内存中”应用程序的加载时间。

另外,有人知道shelve.sync的时间复杂性是什么吗?在O(delta)中,detla是发生在深度嵌套对象上的更改吗?

代码语言:javascript
复制
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"])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-16 03:36:06

writeback=True货架具有存储从缓存中检索到的对象的缓存。从缓存中检索到两次检索的元素,并且当货架关闭或同步时,缓存被用来将更改写回文件。

Shelf.sync()将所有缓存项写回磁盘上的文件,清除缓存。架子忘记了检索到的所有对象。对example的进一步更改不会反映在货架上,如果您在同步之后再次尝试检索d["example"],您将得到一个新的dict,而不是获取example

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

此外,sync会重新对缓存中的每个条目进行重新筛选,而不管哪些项已经更改或没有更改(它不知道),并将新的泡菜写回磁盘。不管花多长时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61232475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档