为什么 shelve.sync 没有按预期工作?
Why does shelve.sync not work as expected?
为什么 shelve
不同步下面示例中的第二个密钥 (world
)?我两次调用 sync
方法来更新数据——但它没有这样做——也没有引发异常。这是预期的行为吗?一般来说,我可以依赖同步发生吗always?
我正在评估 shelve
作为一个选项,通过保存我的应用程序的状态(一个深层嵌套的对象)来减少我的 "in-memory" 应用程序的加载时间。
另外,有谁知道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"])
一个 writeback=True
架子有一个缓存,用于存储从缓存中检索到的对象。两次检索的元素从缓存中检索,缓存用于在关闭或同步货架时将更改写回文件。
Shelf.sync()
将所有缓存条目写回磁盘上的文件, 清除缓存。架子忘记了所有检索到的对象。对 example
的进一步更改不会反映在 shelf 中,如果您在同步后尝试再次检索 d["example"]
,您将得到一个从 shelf 重建的新字典,而不是得到 example
.
似乎没有 public 界面可以在不刷新缓存的情况下同步更改。
另外,sync
重新选择缓存中的每个条目,不管有什么改变或没有改变(它不知道),并将新的选择写回磁盘。需要多长时间。
为什么 shelve
不同步下面示例中的第二个密钥 (world
)?我两次调用 sync
方法来更新数据——但它没有这样做——也没有引发异常。这是预期的行为吗?一般来说,我可以依赖同步发生吗always?
我正在评估 shelve
作为一个选项,通过保存我的应用程序的状态(一个深层嵌套的对象)来减少我的 "in-memory" 应用程序的加载时间。
另外,有谁知道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"])
一个 writeback=True
架子有一个缓存,用于存储从缓存中检索到的对象。两次检索的元素从缓存中检索,缓存用于在关闭或同步货架时将更改写回文件。
Shelf.sync()
将所有缓存条目写回磁盘上的文件, 清除缓存。架子忘记了所有检索到的对象。对 example
的进一步更改不会反映在 shelf 中,如果您在同步后尝试再次检索 d["example"]
,您将得到一个从 shelf 重建的新字典,而不是得到 example
.
似乎没有 public 界面可以在不刷新缓存的情况下同步更改。
另外,sync
重新选择缓存中的每个条目,不管有什么改变或没有改变(它不知道),并将新的选择写回磁盘。需要多长时间。