lru_cache转储到文件中并再次加载回内存中

时间:2016-03-02 09:05:02

标签: python python-3.x caching in-memory-database functools

functools的{​​{1}}内容中,有一个Python3装饰器会记住你的函数调用。

我有办法将此缓存转储到文件中,然后将文件重新加载到内存中吗?

我在functools文档中找不到此功能。什么是推荐的方法来实现上述要求,最好是只涉及Python的解决方案?

1 个答案:

答案 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():
    ...