gpt4 book ai didi

Python functools.lru_cache 驱逐回调或等效

转载 作者:行者123 更新时间:2023-11-28 16:33:27 26 4
gpt4 key购买 nike

是否可以在项目被逐出时为 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() 函数。此函数返回“弹出”项的键和值。

要注入(inject)逐出回调,只需从所需的缓存中派生并覆盖 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

关于Python functools.lru_cache 驱逐回调或等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29470958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com