3
当某个项目被驱逐时,是否可以为functools.lru_cache
定义回调?在回调中,缓存的值也应该存在。Python functools.lru_cache逐出回调或等效
如果不是,也许有人知道支持驱逐和回调的轻量级字典式缓存?
当某个项目被驱逐时,是否可以为functools.lru_cache
定义回调?在回调中,缓存的值也应该存在。Python functools.lru_cache逐出回调或等效
如果不是,也许有人知道支持驱逐和回调的轻量级字典式缓存?
我将发布我用于未来参考的解决方案。我使用了一个名为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
,它在调出项目时调用MutableMapping
的popitem()
函数。该函数返回“弹出”项的键和值。
要注入驱逐回调函数,只需从想要的高速缓存中派生并覆盖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