【问题标题】:Python functools.lru_cache eviction callback or equivalentPython functools.lru_cache 驱逐回调或等效
【发布时间】:2015-04-06 12:05:44
【问题描述】:

当一个项目被驱逐时,是否可以为functools.lru_cache 定义一个回调?在回调中,缓存的值也应该存在。

如果没有,也许有人知道支持驱逐和回调的轻量级 dict-like 缓存?

【问题讨论】:

    标签: python python-3.x functools


    【解决方案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,它在驱逐项目时从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
    

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多