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': ...
随机推荐
- 模板设计模式--java进阶day03
1.模板设计模式 说到模板,我们第一时间想到的可能就是写作文 不过这样写就是一篇完整的作文,我们应该进行修改 这样修改还会存在一个问题,每一个人写的作文不同,中间的body()无法描述清楚,所以我们要 ...
- ASP.NET Web.config Transformations
... 参考文档 Web Deployment Content Map for Visual Studio and ASP.NET 微软ASP.NET站点部署指南(3):使用Web.Config文件的 ...
- 深度学习实战:从零构建图像分类API(Flask/FastAPI版)
引言:AI时代的图像分类需求 在智能时代,图像分类技术已渗透到医疗影像分析.自动驾驶.工业质检等各个领域.作为开发者,掌握如何将深度学习模型封装为API服务,是实现技术落地的关键一步.本文将手把手教你 ...
- rabbitmq分布式事务
Rabbitmq解决分布式事务的原理:可靠消息最终一致性方案 需要保证以下三要素 1.确认生成者一定要将消息可靠投递到MQ[采用MQ的异步confirm消息确认机制] public interface ...
- java基础之关键字(this、static、super、final、 权限修饰符)
一.this的含义 this:代表所在类的当前对象的引用(地址值),即对象自己的引用. 记住 :方法被哪个对象调用,方法中的this就代表那个对象.即谁在调用,this就代表谁 this的三种运用: ...
- Tomcat日志拆分(linux)
1.新增shell脚本[tomcat_catalina.sh] #!/bin/bash #设置日志文件存放目录 LOG_HOME="/app/server/tomcat/tomcat-808 ...
- 定义一个正则表达式,使用finditer从表达式内取值后存储到列表中
演示代码: responce = requests.get(url = url_web,headers=head) url_obj = re.compile(r'<a class="m ...
- Mysql数据库常用操作和Mysql大数据高效迁移方案
1.数据迁移: 1.数据量较少时可使用mysqldump和mysql命令导出和导入 # 导出指定数据库系统 mysqldump -u _username -p _dbname > _sqlfil ...
- CSharp_base
C# 基础篇 枚举(enum) 枚举是一个被命名的整形常量的集合 用于表示: 状态 类型 申明枚举:创建一个自定义的枚举类型 申明枚举变量:使用申明的自定义的枚举类型,来创建一个枚举变量 语法 //语 ...
- Python3循环结构(二) while循环
Python3 while循环 当循环次数无界时通常会使用while循环. 1.使用while循环输出九九乘法表 i=1 while i < 10: j = 1 while j < i + ...