当项目被逐出时,是否可以为functools.lru_cache
定义回调?在回调中,缓存的值也应该存在。
如果不是,也许有人知道一个轻量级的dict类缓存,支持逐出和回调?
最佳答案
我会把我用过的解决方案贴出来,以备将来参考。我使用了一个名为cachetools的包(https://github.com/tkem/cachetools)。您只需$ pip install cachetools
即可安装。
它还具有类似于Python 3functools.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
关于python - Python functools.lru_cache逐出回调或等效项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29470958/