当前位置: 首页 > news >正文

python实现API调用缓存

python实现API调用缓存

  • 1.代码
  • 2.输出
  • 3.保存的json数据

想把python某些函数的参数及返回值记录下来,如果之前已计算过,则直接返回缓存中的数据

1.代码

import jsondef get_variable_name(var):'''变量转变量名'''local_vars=globals()return [name for name, value in local_vars.items() if value is var][0]def quick_exec(func,params):'''通过参数生成UUID,如果缓存中存在则直接获取,否则执行实际的函数,之后保存结果'''cache_path="cache_data.json"records={}uuid="_".join([str(x) for x in params])try:with open(cache_path,"r") as f:records=json.load(f)except:passif uuid in records:ret=records[uuid]["result"]else:ret=func(params)records[uuid]={"result":ret,"params":{}}for var in params:records[uuid]["params"][get_variable_name(var)]=varwith open(cache_path,"w") as f:json.dump(records,f,indent=4)return retdef sdk_api(params):'''实际的调用'''print("sdk_api call in:",params)return sum(params)def l0():globals()['a']=1globals()['b']=2globals()['c']=3globals()['d']=4globals()['e']=5params=(globals()['a'],globals()['b'],globals()['c'],globals()['d'],globals()['e'])ret=quick_exec(lambda x:sdk_api(x),params)print(ret)ret=quick_exec(lambda x:sdk_api(x),params)print(ret)globals()['b']=3params=(a,b,c,d,e)ret=quick_exec(lambda x:sdk_api(x),params)print(ret)ret=quick_exec(lambda x:sdk_api(x),params)print(ret)def l1():l0()def main():l1()
main()

2.输出

# 第一次运行
sdk_api call in: (1, 2, 3, 4, 5)
15
15
sdk_api call in: (1, 3, 3, 4, 5)
16
16
# 第二次运行
15
15
16
16

3.保存的json数据

{"1_2_3_4_5": {"result": 15,"params": {"a": 1,"b": 2,"c": 3,"d": 4,"e": 5}},"1_3_3_4_5": {"result": 16,"params": {"a": 1,"b": 3,"d": 4,"e": 5}}
}
http://www.lryc.cn/news/388827.html

相关文章:

  • 传输距离3000M|低延迟|48K采样音频传输模块-SA356大功率发射模块
  • 前端css性能优化
  • 如何在Windows上使用Docker搭建PHP开发环境
  • java 单例模式
  • 爬虫 属性 方法
  • HEX文件
  • 人机融合的智能操作系统
  • 数据结构之二叉树概念
  • Linux源码阅读笔记08-进程调度API系统调用案例分析
  • 短视频抓取:成都柏煜文化传媒有限公司
  • proto的前后端使用
  • 华为解决固态硬盘致命弱点:延长30~50%的SSD寿命
  • 登录验证码高扩展性设计方案
  • Spring MVC数据绑定和响应——数据回写(一)普通字符串的回写
  • 怎样才能更好地保护个人账号的安全
  • react native优质开源项目
  • 速盾:海外cdn有哪些优缺点呢?
  • Unity Shader 软粒子
  • nextTick的应用和原理理解
  • .Net Core 微服务之Consul
  • 速盾:cdn流量调度
  • Windows批处理入门:快速掌握批处理脚本的基本技巧
  • 【C++之unordered_set和unordered_map的模拟实现】
  • 服务器使用别人的conda
  • 农村程序员陈随易2024年中总结
  • Spring Boot中的日志管理最佳实践
  • python基础语法 004-2流程控制- for遍历
  • 【高考志愿】医学
  • 音视频开发31 FFmpeg 编码- avcodec_find_encoder和avcodec_find_encoder_by_name
  • 大模型压缩:基于贝叶斯优化的自适应低秩分解