人到中年有點(diǎn)甜
2022-10-11 21:40:02
為什么不shelve同步world以下示例中的第二個(gè)鍵 ( )?我sync兩次調(diào)用該方法來(lái)更新數(shù)據(jù) - 但它沒(méi)有這樣做 - 也沒(méi)有引發(fā)異常。這是預(yù)期的行為嗎?一般來(lái)說(shuō),我可以依靠同步總是發(fā)生嗎?我正在評(píng)估shelve通過(guò)保存我的應(yīng)用程序的狀態(tài)(一個(gè)深度嵌套的對(duì)象)來(lái)減少我的“內(nèi)存中”應(yīng)用程序的加載時(shí)間的一個(gè)選項(xiàng)。另外,有誰(shuí)知道時(shí)間復(fù)雜度是shelve.sync多少?深度嵌套的對(duì)象發(fā)生的變化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貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
架子有一個(gè)writeback=True
緩存,用于存儲(chǔ)從緩存中檢索到的對(duì)象。檢索兩次的元素從緩存中檢索,緩存用于在書(shū)架關(guān)閉或同步時(shí)將更改寫(xiě)回文件。
Shelf.sync()
將所有緩存條目寫(xiě)回磁盤(pán)上的文件,并清除緩存。架子忘記了所有檢索到的對(duì)象。對(duì) 的進(jìn)一步更改example
不會(huì)反映在架子上,如果您d["example"]
在同步后再次嘗試檢索,您將得到一個(gè)從架子上重建的新 dict,而不是得到example
.
看起來(lái)沒(méi)有公共接口可以在不刷新緩存的情況下同步更改。
此外,sync
重新腌制緩存中的每個(gè)條目,無(wú)論有沒(méi)有改變(它不知道),并將新的腌制寫(xiě)回磁盤(pán)。這需要多長(zhǎng)時(shí)間。
添加回答
舉報(bào)
0/150
提交
取消