shelve 的使用
import shelve
import time
from typing import Any
def cache_data(key: str, data: Any, shelf_file: str = 'cache.db') -> None:
"""将数据缓存到本地 shelve 文件"""
with shelve.open(shelf_file) as shelf:
shelf[key] = {
'data': data,
'timestamp': time.time()
}
def get_cached_data(key: str, max_age: int = 3600, shelf_file: str = 'cache.db') -> Any:
"""
从缓存中获取数据
max_age: 缓存有效期(秒), 默认1小时
返回: 缓存数据或 None(如果缓存不存在或过期)
"""
try:
with shelve.open(shelf_file) as shelf:
if key in shelf:
cached = shelf[key]
if time.time() - cached['timestamp'] <= max_age:
return cached['data']
else:
del shelf[key] # 删除过期缓存
except Exception as e:
print(f"缓存读取错误: {e}")
return None
# 示例用法
if __name__ == "__main__":
# 模拟获取数据的函数
def get_expensive_data():
print("执行昂贵的数据获取操作...")
return {"result": "一些复杂计算的结果", "value": 42}
cache_key = "expensive_data"
# 尝试从缓存中获取数据
cached_result = get_cached_data(cache_key)
if cached_result is None:
# 缓存不存在或过期, 获取新数据并缓存
result = get_expensive_data()
cache_data(cache_key, result)
print(f"已缓存新数据: {result}")
else:
# 使用缓存数据
print(f"使用缓存数据: {cached_result}")
shelve 的使用的更多相关文章
- python模块(shelve,xml,configparser,hashlib,logging)
1.1shelve模块 shelve 模块比pickle模块简单,只有一个open函数,返回类似字典对象,可读可写:key必须为字符串, 而值可以是python所支持的数据类型. shelve模块主要 ...
- Shelve Instance 操作详解 - 每天5分钟玩转 OpenStack(38)
Instance 被 Suspend 后虽然处于 Shut Down 状态,但 Hypervisor 依然在宿主机上为其预留了资源,以便在以后能够成功 Resume. 如果希望释放这些预留资源,可以使 ...
- python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)
1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...
- shelve模块理解
import shelve import sys def store_person(db): pid = input("Enter unique ID mnumber:") per ...
- pickle与shelve
pickle Example 写入文件 import pickle integers = [1, 2, 3, 4, 5] with open('pickle-example.p', 'wb') as ...
- Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目 ...
- python序列化: json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
- python pickle 和 shelve模块
pickle和shelve模块都可以把python对象存储到文件中,下面来看看它们的用法吧 1.pickle 写: 以写方式打开一个文件描述符,调用pickle.dump把对象写进去 dn = {'b ...
- shelve模块
#coding:utf-8 __author__ = 'similarface' #email:similarface@outlook.com ''' shelve模块: 映射容器 存储对象,被存储的 ...
- python(6)- shelve模块
前面学习了pickle,这两个可以将数据持久化存储到硬盘上,在实际应用中,我们可能会多次将数据dump到同一文件里,试一下: import pickle data = {'k1':123, 'k2': ...
随机推荐
- ro在xe10.3上的安装
在学习研究RO. RO9.2.101.1295在xe10.3上安装遇到新问题.记录处理的办法: 没有采用执行exe安装的方法.而是采用复制源代码后编译安装. 1.把生成的bpl.dcp安装到默认目录, ...
- WCHNET_SocketSend返回0x11原因及解决方法
问题描述: TCPCLIENT模式使用WCHNET_SocketSend发送有概率会返回0x11 按wchnet.h定义为内存溢出错误. 异常分析: 通过WCHNET_QueryUnack查看,发现异 ...
- 从 Excel 到你的表格应用:数据验证功能的嵌入实践指南
前言: 随着信息化的不断发展,传统表格软件已无法满足用户对便携性.数据自动化管理等日益复杂的要求,将电子表格与其他系统结合.开发自己的表格应用已成为愈发火热的趋势. 然而,当企业需要将 Excel 的 ...
- 为什么在 MySQL 中不推荐使用多表 JOIN?
为什么在 MySQL 中不推荐使用多表 JOIN? 在 MySQL 中,虽然 JOIN 操作是关系型数据库的重要特性,用于从多个表中获取数据,但在某些场景下不推荐频繁使用多表 JOIN.以下是一些主要 ...
- 揭秘AI自动化框架Browser-use(二),如何构造大模型提示词
在上一篇技术分析中,我们探讨了Browser-use框架如何实现页面元素标注.本文将聚焦于其提示词构造流程,揭示AI如何理解浏览器界面的核心机制. 上一篇-揭秘AI自动化框架Browser-use(一 ...
- 记录一次SpringBoot + Vue前后分离项目的部署流程
前言 本教程使用黑马 SpringBoot3+Vue3全套视频教程 大事件项目作为前后端代码. 前置需要: mysql jdk redis nginx linux环境 打包 前端 构建项目命令 npm ...
- Spring JdbcTemplate操作数据库
Spring JdbcTemplate操作数据库 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8" ...
- 自定义工具类之”判断两个集合中是否有一个相同的值-》CollectionUtils.containsAny(集合1,集合2)“
判断两个集合中是否有一个相同的值 CollectionUtils.containsAny(集合1,集合2)就可以满足以下条件 两个集合中,只要有一个值相同就直接返回true 如:集合1:"1 ...
- 解决更新WIFI驱动后出现网络适配器黄色三角警告
更新WIFI驱动后出现网络适配器黄色三角警告问题的解决方案 在更新 Intel 无线网卡驱动后,遇到了网络适配器异常的问题,尤其是在曾经安装/卸载过 VMware 的电脑上.本篇文章将详细介绍这个问题 ...
- 私有网盘部署-Cloudreve网盘
前言 关于私有网盘,企业级网盘可选可道云,filebroser,seafile等.关于私有网盘,笔者推荐Cloudreve. 无论是从使用角度看,WebDa.离线下载.分享管理.文件检索,还是管理角度 ...