为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 shelve.sync 不能按预期工作?

为什么 shelve.sync 不能按预期工作?

人到中年有点甜 2022-10-11 21:40:02
为什么不shelve同步world以下示例中的第二个键 ( )?我sync两次调用该方法来更新数据 - 但它没有这样做 - 也没有引发异常。这是预期的行为吗?一般来说,我可以依靠同步总是发生吗?我正在评估shelve通过保存我的应用程序的状态(一个深度嵌套的对象)来减少我的“内存中”应用程序的加载时间的一个选项。另外,有谁知道时间复杂度是shelve.sync多少?深度嵌套的对象发生的变化O(delta)在哪里?detlaimport shelveexample = {}d = shelve.open("shelve.db", writeback=True)d["example"] = exampleexample["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"])
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

架子有一个writeback=True缓存,用于存储从缓存中检索到的对象。检索两次的元素从缓存中检索,缓存用于在书架关闭或同步时将更改写回文件。

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

看起来没有公共接口可以在不刷新缓存的情况下同步更改。


此外,sync重新腌制缓存中的每个条目,无论有没有改变(它不知道),并将新的腌制写回磁盘。这需要多长时间。


查看完整回答
反对 回复 2022-10-11
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号