python - 持久字典,其中键可以是任何可哈希的

标签 python dictionary persistence memoization

我正在实现 functools.lru_cache 的小型“持久”版本,其中“持久”意味着缓存不会在后续运行之间被破坏。为此,我想我可以简单地用 shelve 替换 functools.lru_cache 使用的字典。对象,但我遇到了 shelve 对键为 str 的要求。我尝试使用 str(hash(...).to_int(...)) 修复它,但是 hash(...) is not identical for identical cpython 解释器的不同运行之间的对象。

是否有像 shelve 这样的类允许任何可散列的键,而不仅仅是 strings,同时像字典一样透明地访问?

一些细节:我的缓存可能在 100MB 左右。它的阅读频率较高,编写频率较低。

最佳答案

具体的解决方案实际上取决于您的需求,但您可能会发现使用数据库是最适合您的情况的解决方案。您也可以使用 pickle 代替 shelve,但这当然有其缺点。

  • 缓存大吗?

然后你需要一个解决方案来避免在每次访问时读取/写入整个缓存(例如基于 pickle 的解决方案),例如一个数据库。

  • 是否经常访问?

那么您可能还需要一个内存缓存来避免频繁的缓慢外部访问。

快速谷歌搜索发现:persistentdict .

另见 this question .

关于python - 持久字典,其中键可以是任何可哈希的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399251/

相关文章:

javax.persistence.PersistenceException : Unable to build EntityManagerFactory Tomcat 7 Spring Hibernate MS SQL

python - 为什么 CalledProcessError 在 subprocess.check_output( ['cmd' , 'arg' ])

python - 将蜘蛛的输出保存在变量中而不是文件中

javascript - 在 Ionic Framework Google map 中获取路线

python - 在没有 collections.counter 的情况下根据整数值对字典进行排序

c# - OpenCV FileStorage - 如何在 C# 中使用 EmguCV?

java - 在数据库中保留 Quartz 触发器的正确​​方法

Python:直接从 Pandas 加载 Oracle 表(写入 Oracle)

python - 在python上打印出类参数

java - 如果所有键都是唯一的, map 的 put 是否需要同步?