我在 Python 3.3 中使用 @functools.lru_cache
。我想将缓存保存到一个文件中,以便在程序重新启动时恢复它。我怎么办?
编辑 1 可能的解决方案: 我们需要挑选任何类型的可调用对象
酸洗问题 __closure__
:
_pickle.PicklingError: Can't pickle <class 'cell'>: attribute lookup builtins.cell failed
如果我尝试在没有它的情况下恢复功能,我会得到:
TypeError: arg 5 (closure) must be tuple
原文由 Francesco Frassinelli 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不能使用
lru_cache
做您想做的事,因为它不提供访问缓存的 API,并且在未来的版本中可能会用 C 语言重写。如果你真的想保存缓存,你必须使用不同的解决方案来让你访问缓存。自己写一个缓存就够简单了。例如:
然后,您可以将其用作装饰器:
并检索
cache
:然后你可以随意 pickle/unpickle 缓存并加载它:
我在 python 的问题跟踪器中发现了一个将转储/加载添加到
lru_cache
的 功能请求,但它没有被接受/实现。也许将来可以通过lru_cache
为这些操作提供内置支持。