python - 使用 functools lru_cache,如何确定函数是否返回了缓存数据?
问题描述
我有一个简单的实现,使用包装器 lru_cache 围绕从远程数据库获取数据的函数。我希望能够判断结果是否可能是“陈旧的”(即,它是从缓存中获取的还是从数据库中获取的)。我怎么能弄清楚呢?
代码很简单,只需:
@lru_cache(maxsize=2048)
def fetch_cached_data(query, *args, **kwargs):
return fetch_data(query, *args, **kwargs)
解决方案
仅在单线程程序中有效的糟糕解决方案可能是监视cache_info
函数以查看统计信息是否正在更改:
hits = f.cache_info().hits
result = f(some_arg)
if f.cache_info().hits > hits:
# this result was retrieved from cache
...
更好的解决方案可能是更多地考虑您认为过时的内容...所有值最终都来自数据库...是什么让您在过去的函数调用中查询过时...自上次查询以来的时间,返回的行上的版本标记等
推荐阅读
- css - 在 reactJs 中动态和有条件地更改按钮的 css
- python - 嵌套类中的作用域如何?
- javascript - 如何在窗口中使用 JS 三元运算符。滚动对象
- java-native-interface - nvcc 在编译 JNI 代码时生成无效错误
- android - 找不到 Gradle DSL 方法:'implementation()' (Android React Native)
- asp.net-mvc - 设置 / 到 /home 的默认路由
- typescript - 打字稿中“as”运算符的用途是什么?
- reactjs - 停止在挂载上运行 useEffect
- go - DynamoDB 更新项目失败
- swift - 如何获取在 UICollectionView 中点击的自定义单元格的索引