当项目被逐出时,是否可以为functools.lru_cache定义回调?在回调中,缓存的值也应该存在。
如果不是,也许有人知道一个轻量级的dict类缓存,支持逐出和回调?

最佳答案

我会把我用过的解决方案贴出来,以备将来参考。我使用了一个名为cachetools的包(https://github.com/tkem/cachetools)。您只需$ pip install cachetools即可安装。
它还具有类似于Python 3functools.lru_cachehttps://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

关于python - Python functools.lru_cache逐出回调或等效项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29470958/

10-10 23:47