Python functools.lru_cache обратный вызов выселения или эквивалент
Можно ли определить обратный вызов для functools.lru_cache
когда предмет выселен? В обратном вызове также должно присутствовать кэшированное значение.
Если нет, может, кто-то знает легкий кэш, похожий на диктовку, который поддерживает выселение и обратные вызовы?
1 ответ
Я опубликую решение, которое я использовал для дальнейшего использования. Я использовал пакет с именем 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