為什么不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
重新腌制緩存中的每個條目,無論有沒有改變(它不知道),并將新的腌制寫回磁盤。這需要多長時間。
添加回答
舉報
0/150
提交
取消