python缓存工具项目可以有不同的ttl吗



Im使用@cachetools.func.ttl_cache(maxsize=3, ttl=3600, timer=time.time, typed=False)缓存不同的数据帧。被包装的函数本身并不构建DF,但给定一个参数会调用正确的函数。

根据参数的不同,DF的构建可能很耗时或很快,因为我想修改项目ttl(生存时间(。因此,项目1可以具有ttl=3600,而项目2 ttl=10800。

是否支持该功能?使用全局变量或任何其他方式?文档

Will很可能是正确的,但如果你想尝试,我认为子类TTLCache和覆盖一个函数应该有效:

from cachetools import Cache, TTLCache
cache = TTLItemCache(maxsize=2, ttl=100)
# ttl=100
cache.__setitem__('key1', 'val1')
# ttl=200
cache.__setitem__('key2', 'val2', ttl=200)
class TTLItemCache(TTLCache):
def __setitem__(self, key, value, cache_setitem=Cache.__setitem__, ttl=None):
super(TTLItemCache, self).__setitem__(key, value)
if ttl:
link = self._TTLCache__links.get(key, None)
if link:
link.expire += ttl - self.ttl

否。

但是,您可以创建自己的自定义缓存,以便与cachetools一起使用。您可以查看ttl.py中ttlcache的实现作为示例。这很简单。

不幸的是,ttlcache本身并没有以这样一种方式进行设计,即您可以方便地将其子类化,并覆盖决定缓存中项目何时过期的逻辑。只需进入并篡改链接的截止日期就很容易了,但他们使用双下划线作为所有链接相关逻辑的前缀,这一事实表明作者真的不希望你这么做。

我建议您只需实现自己的缓存。

最新更新