在functools
的{{1}}内容中,有一个Python3
装饰器会记住你的函数调用。
我有办法将此缓存转储到文件中,然后将文件重新加载到内存中吗?
我在functools文档中找不到此功能。什么是推荐的方法来实现上述要求,最好是只涉及Python的解决方案?
答案 0 :(得分:2)
我不知道解决这个问题的一个标准方法。 但你可以像这样写下你的注释:
def diskcached(cachefile, saveafter=1):
def cacheondisk(fn):
try:
with open(cachefile, 'rb') as f:
cache = pickle.load(f)
except:
cache = {}
unsaved = [0]
@wraps(fn)
def usingcache(*args, **kwargs):
try:
key = hash((args, kwargs))
except TypeError:
key = repr((args, kwargs))
try:
ret = cache[key]
except KeyError:
ret = cache[key] = fn(*args, **kwargs)
unsaved[0] += 1
if unsaved[0] >= saveafter:
with open(cachefile, 'wb') as f:
pickle.dump(cache, f)
unsaved[0] = 0
return ret
return usingcache
return cacheondisk
并与
一起使用@diskcached("filename_to_save")
def your_function():
...