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': ...
随机推荐
- .net WorkFlow 流程介绍
WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...
- zk源码—4.会话的实现原理
大纲 1.创建会话 (1)客户端的会话状态 (2)服务端的会话创建 (3)会话ID的初始化实现 (4)设置的会话超时时间没生效的原因 2.分桶策略和会话管理 (1)分桶策略和过期队列 (2)会话激活 ...
- Python 迭代器和生成器概念
目录 迭代器的介绍 自定义迭代器 省略的迭代器 生产器的介绍 yield的普通用法 yield的高级用法 yidle的实际应用案例 总结 迭代器的介绍 迭代器的定义: 迭代器(Iterator)是 P ...
- MySQL 的存储引擎有哪些?它们之间有什么区别?
MySQL 的存储引擎及其区别 MySQL 提供多种存储引擎,不同存储引擎在数据存储方式.索引支持.事务处理等方面各具特点.以下列出常用的存储引擎及其主要区别. 1. 常见存储引擎 (1)InnoDB ...
- 为什么 Java 中 CMS 垃圾收集器在发生 Concurrent Mode Failure 时的 Full GC 是单线程的?
为什么 Java 中 CMS 垃圾收集器在发生 Concurrent Mode Failure 时的 Full GC 是单线程的? 在 CMS(Concurrent Mark-Sweep)垃圾收集器中 ...
- 前端js需要连接后端c#的wss服务
背景前端js需要连接后端wss服务 前端:js后端:c# - 控制台搭建wss服务器 步骤1 wss需要ssl认证,所以需要个证书,随便找一台linux的服务器(windows的话,自己安装下open ...
- TextBox输入法控制,进入输入框则启用或禁用输入法(ime),禁用后只能输入英文
有的场景需要禁止用户打开ime模式(禁止输入法输入),所以 TextBox 支持默认属性配置,效果如下: <Window x:Class="切换输入法.MainWindow" ...
- 前端传字符串,需要转List对象
前端传字符串,需要转List对象 import com.alibaba.fastjson.JSONObject; List<LogySbjsJdsbqxxxAccount> param = ...
- OneNote Embedded 文件滥用检测
本文分享自天翼云开发者社区<OneNote Embedded 文件滥用检测>,作者:Icecream 攻击技术 在这些网络钓鱼活动中被滥用的OneNote功能是在图片后面隐藏嵌入式文件,诱 ...
- VMware 17 Pro 虚拟机从下载到安装的超详细教程,解决你的所有疑问
VMware 17 Pro介绍 VMware 17 Pro是一款功能强大的虚拟机软件,适用于开发人员.测试人员.系统管理员和教育机构.它可以在一台计算机上模拟运行多台虚拟机,支持Windows.Lin ...