Python functools.lru_cache逐出回调或等效

时间:2015-04-06 12:05:44

标签: python python-3.x functools

当项目被驱逐时,是否可以为functools.lru_cache定义回调?在回调中,缓存值也应该存在。

如果没有,也许有人知道一个支持驱逐和回调的轻量级dict缓存?

1 个答案:

答案 0 :(得分:2)

我将发布我用于将来参考的解决方案。我使用了一个名为cachetools(https://github.com/tkem/cachetools)的包。您只需安装$ pip install cachetools即可安装。

它还有类似于Python 3 functools.lru_cachehttps://docs.python.org/3/library/functools.html)的装饰器。

所有不同的缓存都来自cachetools.cache.Cache,它在驱逐项目时从popitem()调用MutableMapping函数。此函数返回键和#34; popped"的值。项目。

要注入逐出回调,只需从所需的缓存中派生并覆盖popitem()函数。例如:

class LRUCache2(LRUCache):
    def __init__(self, maxsize, missing=None, getsizeof=None, evict=None):
        LRUCache.__init__(self, maxsize, missing, getsizeof)
        self.__evict = evict

    def popitem(self):
        key, val = LRUCache.popitem(self)
        evict = self.__evict
        if evict:
            evict(key, val)
        return key, val