建立函数及其参数的结果缓存

news/2024/11/19 15:36:48/文章来源:https://www.cnblogs.com/tellw/p/18554960
from functools import wraps
import timeclass CacheManager:def __init__(self):self._cache = {}def get_cache_obj(self, key):"""获取缓存对象"""return self._cache.get(key)def add_cache_obj(self, key, obj):"""添加缓存对象"""self._cache[key] = objreturn objdef __del__(self):"""清除所有缓存对象"""# print(f"CacheManager del")for k, v in self._cache.items():# print(f"CacheManager del:{k=}")del vself._cache.clear()del self._cache@classmethoddef cache_result(cls, func):"""装饰器:缓存结果,支持参数作为缓存的唯一键。"""@wraps(func)def wrapper(instance, *args, **kwargs):# 根据函数名和参数构建唯一缓存键key = f"{func.__name__}:{args}:{kwargs}"print(key)# 检查是否已缓存cache_obj = instance.cache_manager.get_cache_obj(key)if cache_obj is not None:print(cache_obj)return cache_obj# 缓存中没有对象,执行函数并缓存结果result = func(instance, *args, **kwargs)instance.cache_manager.add_cache_obj(key, result)print(result)return resultreturn wrapperclass MyClass:def __init__(self):self.cache_manager = CacheManager()def __del__(self):print("MyClass.__del__")@property@CacheManager.cache_resultdef oms_user(self):# 该代码只在缓存不存在时执行# return [1, 2, 3]return time.time()def test_cache():m = MyClass()print(id(m.oms_user))print(id(m.oms_user))test_cache()

结果

oms_user:():{}
1732000987.240014
2584475181488
oms_user:():{}
1732000987.240014
2584475181488
MyClass.__del__

Python cache 内存泄漏问题

创建于2411191534,修改于2411191534

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836843.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建企业级数据分析 Agent:架构设计与实现

引言 数据分析 Agent 是现代企业数据栈中的重要组件,它能够自动化数据分析流程,提供智能化的数据洞察。1. 数据处理工具链设计 数据处理工具链是整个分析系统的基础设施,它决定了系统处理数据的能力和效率。一个优秀的工具链设计应该具备:良好的可扩展性:能够轻松添加新的数据…

空间计算、物理计算、实时仿真与创造拥有「自主行为」的小狗 | 播客《编码人声》

「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。虚拟世界与现实世界的界限逐渐模糊,已然成为不争的事实。但究竟哪些曾经的幻想已然照进现实,又有哪些挑战依然横亘眼…

ABB机械手维修-运动控制

ABB机械手运动控制ABB机械手的运动控制主要通过其先进的控制系统实现。ABB机械手具有多种运动模式,包括单轴运动、线性运动和重定位运动。在进行手动操纵前,需要将工作模式档位切换至手动减速模式。 - 单轴运动:也称为关节运动,是对机器人的各个关节轴进行单独控制移动操作…

不可思议!7、8 年外包进了国企!!

大家好,我是R哥。 今天分享一个非常「难以置信」的辅导案例,一个「双非二本」的兄弟从毕业就开始干外包,一直干了 7、8 年外包,从外包离职后,经过我们几个月的面试辅导,最终去了某国企,还是待遇最好的 10 家国企之一。 这兄弟是 5 月份加入面试辅导的,距离他离职已经个…

制造业怎么用好仓库管理系统?仓库管理系统在制造业中的应用实例

随着科技的发展,制造企业对仓库管理的要求也越来越高。大家都在想,怎么能用智能化、自动化的方法来提高仓库的工作效率,减少库存积压,同时让客户更满意。这可是企业发展的一个很关键的问题。这篇文章会通过几个实际的例子,详细讲讲WMS在制造业里是怎么发挥作用的。目的就是…

如何快速推进项目?这些企业用了哪些项目管理工具?

在当今复杂的商业环境中,项目管理不仅仅是管理任务和时间的工具,它已经成为推动团队协作、提升企业执行力以及实现战略目标的核心环节。随着数字化转型的推进,越来越多的企业和团队开始借助智能化的项目管理软件来优化资源配置、提升工作效率、降低风险,最终实现项目的成功…

单变量微积分学习笔记:函数图像的伸缩变换(15)

平移 x:左加右减y:上加下减伸缩\(af(bx+c)+d\) \(x_2=bx+c\),相当于 \(x\) 轴变为原来的 \(\frac{1}{b}\) 后再向左移动 \(c\) \(x=\frac{x_2-c}{b}\) \(y_2=ay+d\),相当于 \(y\) 轴变为原来的 \(\frac{1}{a}\) 后再向上移动 \(d\) \(y=\frac{y_2-d}{c}\)

设置数据库环境变量 win10

方法 1: 使用系统设置界面打开系统属性:在桌面上,右键点击“此电脑”或“我的电脑”,选择“属性”。 在打开的窗口中,点击“高级系统设置”。打开环境变量设置:在“系统属性”窗口中,点击“高级”选项卡下的“环境变量”按钮。设置环境变量:在“环境变量”窗口中,你会看…

小程序开发遇到的问题

真机调试转发给朋友图片加载会失败的问题 在开发工具中分享页面时,图片正常,体验版或手机真机调试时,图片加载失败。电脑上正常,手机上加载失败。 原因是图片的文稿类型为AV1,很多移动设备可能不支持 AV1 解码。 解决办法: 更换为文稿类型为JPEG的图片,图片格式可以是jpg…

用户登录-路由和权限校验

绿色框框是前端,黄色框框是后端。一开始不存在token,若路由存在白名单中,比如login页面,此时会将app.vue中的替换成 login 组件。因为我们在路由中定义了login组件。👆 login/index 动态路由原理 去看文档当中的相应内容。 路由重定向原理 面包屑导航如果只是简单的页面切…

刀片计算机设计方案:192-6U VPX i7 刀片计算机

一、产品概述 该产品是一款基于第三代Intel i7双核四线程(或四核八线程)的高性能6U VPX刀片式计算机。产品提供了可支持全网状交换的高速数据通道,其中P1,P2各支持4个PCIe x4 Gen3总线接口。该产品具有很强的扩展性,可以很好满足多负载多节点的应用需求。 产品…

python调用C#的dll

1、使用VisualStudio建立C#的dll项目 2、编写C#代码生成dll库 3、安装pythonnet 库用于调用C#的dllpip install pythonnet4、编写python代码import clr # 引入 clr 模块,它是 pythonnet 提供的 import sys# 添加 C# DLL 所在的目录 sys.path.append(rCsharp_dll_test.dll)# …