给代码加速之用python实现一个带时间过期的LRU缓存 !

带有效期的lru缓存 【代码】带有效期的lru缓存。 阅读详情

python自带的lru_cache用起来很方便,对于需要大量计算来说,能大大减少计算时间;对于从后端或DB等提取数据来说,能大大减轻后端的压力,加速效果很明显。

但是实际应用的时候,如果后端某个数据更新了,lru_cache没提供删除单个数据方法,只能用cache_clear清空所有缓存数据,效率不高。

1、如果允许短时间内使用脏数据的话,可以设置一个过期时间,防止后台数据修改了而缓存一直不会更新;

Python资源共享群:484031800

2、如果不允许缓存读到脏数据,需要一个删除脏数据的接口,下次调用时刷新数据。

下面代码实现了一个带过期时间的缓存字典类和一个带过期时间的缓存装饰器,能同时解决上面两种情况,支持先进先出和LRU两种缓存淘汰算法。

注:暂不不支持多线程和异步协程库

用法:字典DictWithTTL和装饰器fifocachewithttl的参数相同

capacity: int = 128 最大缓存数量

ttl: int = 300 缓存时间(秒)

lru: bool = True 淘汰算法类型 True时为lru,False为FIFO

提供几个函数:

cache_info 查看缓存统计信息

cache_clear 清空缓存数据

cache_remove 移除缓存值

用例:

  •  
 
@fifocachewithttl(capacity=100, ttl=300)def addone(n): return n+1 

所有代码如下,如有错误,欢迎指正。

  •  
 
from collections import OrderedDictfrom functools import partialfrom
python函数通过lru_cache缓存加速 通过lru_cache缓存加速 不加缓存 %%time def fib(n): return(1 if n in [1, 2] else fib(n-1)+fib(n-2)) print(fib(35)) 9227465 Wall time: 2.11 s 加lru_cache缓存,递归快的一笔 %%time from functools import lru_cache #... 阅读详情

相关推荐

用Python写一个带超时功能和容量限制的字典

import time class CacheDict(dict): """ A sized dictionary with a timeout (seconds) """ def __init__(self, size=100, timeout=None): dict.__init__(self) self._maxsize = size self._stack = [] self._timeout = timeout .

AlphaFinance 686

LRU 缓存。

在本章中,我们将设计并实现一个功能完善、高性能的LRU缓存库,支持基本的get/put操作、过期时间、最大容量限制、命中率统计等高级功能。这个项目将帮助我们深入理解LRU的实现细节和性能优化技巧。项目目标实现基础LRU缓存功能(get/put操作)支持键值对的过期时间设置添加命中率、访问次数等统计功能实现线程安全版本,支持多线程并发访问提供缓存持久化与加载功能进行性能测试与优化技术栈编程语言:Python 3.9+开发工具:PyCharm/VS Code测试框架:pytest。

AI天才研究院 999

expiringdict:具有缓存目的的自动过期值的字典

过期字典 expiringdict 是一个 Python 缓存库。 该库的核心是 ExpiringDict 类,它是一个有序字典,具有用于缓存目的的自动过期值。 任何访问都会发生过期,对象在从过期值清除期间被锁定。 ExpiringDict 不能存储超过 max_len 的元素 - 最旧的将被删除。 注意:对 dict 和 keys() 的迭代不会删除过期的值! 安装 如果你想从 PyPi 安装: pip install expiringdict 如果您想从 GitHub 下载源代码并安装: git clone git@github.com:mailgun/expiringdict.git python setup.py install 或者使用从上面的目录运行的测试依赖项( 、 、 )进行安装: pip install -e expiringdict[test] 要

DDR内存条选购避坑指南:单Rank vs 双Rank性能实测对比(附2024年颗粒推荐)

本文深入解析了内存条中单Rank与双Rank设计的原理与性能差异。通过实战测试对比,揭示了双Rank内存在高负载场景(如3D渲染、视频剪辑)中凭借Rank Interleaving技术带来的显著性能优势,并提供了2024年针对不同用户需求的DDR4/DDR5内存选购策略与避坑指南。

ik678901的博客 1129

新版股票配资系统源码/股票分析系统技术方案

新版股票配资系统;全套源码支持新股申购功能,包含C#+MySQL开发的后台系统及Spring框架,采用C/S架构。注意:本源码仅限技术学习、功能测试及模拟交易使用,严禁用于非法用途,违者责任自负。

q318136906的博客 1643

红外热成像仪原理及应用

目录什么是红外热成像背景介绍热成像技术原理热成像分类红外热成像和夜视仪之间的区别红外热像仪夜视仪红外照明相机对比红外热像仪都能看透什么如何选择制冷型和非制冷型红外热像仪制冷型红外热像仪非制冷型红外热像仪实例对比成像速度空间分辨率灵敏度光谱滤波同步何如选择合适的红外热像仪像素测温范围和被测物温度分辨率空间分辨率温度稳定性热像仪的距离系数比常见热成像仪关键参数量程视场角 (FOV)红外分辨率热灵敏度(NETD)焦距光谱范围精度内置优化分析NTED(热灵敏度)什么是NETD如何测量NETD?NETD如何影响测量?

zhy295006359的博客 2万+

UE5导入MetaHuman虚拟头像后,连接live link face,面部表情捕捉出错修正

UE5 利用live link face 驱动meta human面部表情捕捉

m0_53122690的博客 6595

LIN总线CAPL函数实战——动态控制报文发送(linDeactivateSlot与linActivateSlot)

本文深入解析了LIN总线测试中动态控制报文发送的核心CAPL函数linDeactivateSlot与linActivateSlot的实战应用。通过详细拆解函数参数、生效范围及限制,并结合故障注入、功耗测试等实际场景的代码示例,指导测试工程师在仿真LIN主节点时,灵活调度报文发送,实现高效自动化测试。

weixin_29255731的博客 349

深入解析MOSFET结电容与分布参数:Cgd、Cgs、Cds与Ciss、Crss、Coss的关系与应用

本文深入解析了MOSFET结电容Cgd、Cgs、Cds及其等效参数Ciss、Crss、Coss对开关性能的影响。文章详细阐述了米勒电容Cgd如何导致开关损耗与振荡,并提供了基于电容参数的高频电路选型、驱动设计及PCB布局优化等实战指南,帮助工程师解决开关电源与电机驱动中的常见问题。

weixin_29240711的博客 1287

CXSMILES细则-用于在 SMILES 字符串后存储分子的特殊特征

Chemaxon 扩展 SMILES/SMARTS 用于在 SMILES 字符串后存储分子的特殊特征。任何信息都可以存储在 SMILES 字符串后,只要它们由空格或制表符字符分隔,因为 SMILES 解析器会忽略这些信息,或者将它们作为注释使用。扩展特征以以下格式存储:Chemaxon 的扩展 SMILES/SMARTS 不包含非 ASCII 字符,它们通常以字符代码 n 的形式被转义为 &#n;。在 S-group 中,ASCII 字符“,”、“;”、“|”、“{”、“}”也以这种方式转义。此外,符号“$

ASKCOS博客 401

把审批体验做成一体化:SAP Business Workflow 里的 Secondary Method、Before Method 与 After Method

摘要:SAP Business Workflow 中,Task 的 Secondary、Before 和 After 三类方法对提升审批体验和可追溯性至关重要。Secondary Method 可自动展示辅助信息(如审批时弹出排班报表),但需注意其独立会话特性;Before Method 适合预处理和审计留痕;After Method 确保收尾动作可靠执行。三类方法按特定顺序调用,且错误不影响主流程。合理使用这些方法能减少事务码切换,增强审计能力,优化用户体验。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 189

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 用Python爬取中国校花网后,我发现她们都有个共同点
下一篇: Python多进程的lock机制 !
普通网友
博客等级 码龄7年 438粉丝 263原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值