Python 使用functools lru_cache,如何确定函数是否返回缓存数据?
我有一个简单的实现,在从远程数据库获取数据的函数周围使用包装器lru_缓存。我想知道结果是否“过时”(即,它是从缓存中获取的,而不是从数据库中获取的)。我怎么知道呢 代码很简单,只是:Python 使用functools lru_cache,如何确定函数是否返回缓存数据?,python,lru,Python,Lru,我有一个简单的实现,在从远程数据库获取数据的函数周围使用包装器lru_缓存。我想知道结果是否“过时”(即,它是从缓存中获取的,而不是从数据库中获取的)。我怎么知道呢 代码很简单,只是: @lru_cache(maxsize=2048) def fetch_cached_data(query, *args, **kwargs): return fetch_data(query, *args, **kwargs) 一个糟糕的解决方案(仅在单线程程序中有效)可能是监视函数的缓存\u info
@lru_cache(maxsize=2048)
def fetch_cached_data(query, *args, **kwargs):
return fetch_data(query, *args, **kwargs)
一个糟糕的解决方案(仅在单线程程序中有效)可能是监视函数的
缓存\u info
,以查看统计信息是否在更改:
hits = f.cache_info().hits
result = f(some_arg)
if f.cache_info().hits > hits:
# this result was retrieved from cache
...
一个更好的解决办法可能是更多地考虑你认为过时的东西…所有的值最终都来自数据库。。。是什么使您在过去的函数调用中查询的函数过时。。。自上次查询以来,行上的版本戳返回etc带有
环的解决方案,仅在单线程程序中有效
导入环
@环形lru(最大尺寸=2048)
def fetch_缓存_数据(查询、*args、**kwargs):
返回查询
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
is\u cached=fetch\u cached\u data.has('query'))
数据=获取缓存的数据(“查询”)
打印(是否缓存数据)
is\u cached=fetch\u cached\u data.has('query'))
数据=获取缓存的数据(“查询”)
打印(是否缓存数据)
那么输出是:
False query
True query