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
Другие вопросы по тегам