我正在實現一個小的「持久」版本functools.lru_cache,其中「持久」意味着緩存不會在後續運行之間被破壞。爲此,我認爲我可以簡單地將functools.lru_cache
所使用的字典替換爲shelve對象,但我正在運行對密鑰的要求是str
。我試圖通過使用str(hash(...).to_int(...))
來修復它,但hash(...)
對於cpython解釋器的不同運行之間的相同對象是不同的。持久字典,其中密鑰可以是任何可哈希
是否有像shelve
這樣的類允許任何可哈希鍵,而不僅僅是,而像字典一樣可以透明地訪問?
一些細節:我的緩存可能在100MB左右。它有點頻繁閱讀,而且很少寫。
一個問題在我的腦海裏出現,爲什麼不把你的密鑰'str()'串起來? – zeapo
@zeapo在'str(bytes(hash(...)。to_int(...)))'?我在發佈這個問題後想到了這個問題。它在內部傷害了我,雖然;-) – gerrit
@zeapo只是意識到'散列(...)'不同的cpython運行之間不一致。 – gerrit