5

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

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

4

1 回答 1

6

我将发布我使用的解决方案以供将来参考。我使用了一个名为 cachetools ( https://github.com/tkem/cachetools ) 的包。你可以简单地安装$ pip install cachetools

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

驱逐项目时,不同的缓存都源自cachetools.cache.Cache调用popitem()函数。MutableMapping此函数返回“弹出”项的键和值。

要注入驱逐回调,只需从想要的缓存中派生并覆盖该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
于 2015-04-12T19:20:30.157 回答