python Cachetools项目可以具有不同的ttl吗?

时间:2018-11-21 04:53:57

标签: python pandas caching

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

根据参数,DF可能很耗时或构建速度很快,因为我要修改ttl项(生存时间)。因此,项目1的ttl = 3600,而项目2的ttl = 10800。

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

2 个答案:

答案 0 :(得分:1)

最有可能是正确的,但万一您想尝试一下,我认为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

答案 1 :(得分:0)

否。

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

不幸的是,ttlcache本身并不是真正设计成可以方便地对其进行子类化并覆盖确定高速缓存中的项目何时到期的逻辑。只需修改链接的到期日期就足够了,但是它们使用双下划线为所有与链接相关的逻辑加上前缀的事实表明作者确实不希望您这么做。做到这一点。

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