簡體   English   中英

Python functools.lru_cache逐出回調或等效

[英]Python functools.lru_cache eviction callback or equivalent

當項目被驅逐時,是否可以為functools.lru_cache定義回調? 在回調中,緩存值也應該存在。

如果沒有,也許有人知道一個輕量級的類似dict的緩存支持驅逐和回調?

我將發布我用於將來參考的解決方案。 我使用了一個名為cachetools的包( https://github.com/tkem/cachetools )。 您只需安裝$ pip install cachetools

它還有類似於Python 3 functools.lru_cachehttps://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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM