【Python工具】Python 装饰器实现统计函数执行时长

news2025/4/21 5:12:53

文章目录

    • 1、背景
    • 2、轮子

1、背景

业务基本代码堆积完毕了,部分流程需要调优,想着在几个关键执行路径上进行时间记录,类似 SQL 慢日志一样的方法,方便进行性能问题发现。

了解了下,应该是采用装饰器实现是代码侵入最小,最为优雅的一种方式。

底层原理支撑:

  • Python装饰器深度解析
  • Python functools.wraps 深入理解

2、轮子

import time
from functools import wraps


def recording_time(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        execution_time = (end_time - start_time) * 1000  # 将秒转换为毫秒
        print(f"func '{func.__name__}' execute elapsed time: {execution_time:.6f} ms")
        return result

    return wrapper


def arecording_time(func):
    @wraps(func)
    async def wrapper(*args, **kwargs):
        start_time = time.time()
        result = await func(*args, **kwargs)
        end_time = time.time()
        execution_time = (end_time - start_time) * 1000  # 将秒转换为毫秒
        print(f"func '{func.__name__}' execute elapsed time: {execution_time:.6f} ms")
        return result

    return wrapper


@recording_time
def cost_time():
    time.sleep(2)


cost_time()

效果:

在这里插入图片描述
可以在装饰器中,将 print 替换成 【Python工具】Python 实现 telnet、loguru 框架下的 DEBUG 分级日志打印 中的 debug 等级的日志选项,在需要进行性能问题跟踪排查的时候开启,不需要的时候关闭。

在此,不赘述了哈,感兴趣可以自行移植到项目中使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

林草湿地址、导出echart为word

2.导出 // 导出exportDoc () {this.loading truelet arrRefs [this.$refs.endChart, this.$refs.processChart, this.$refs.officeEndChart]setTimeout(() > {Promise.all(arrRefs.map((canvasDom) > {return this.html2canvasHandle(canvasDom)})).then(res > {let…

如何让潜意识帮你实现你的目标

潜意识的力量是意识的3万倍以上 如果你有一个宏大的目标,怎么借助潜意识实现你的目标呢 比如,我的目标是:帮助100万人颠覆潜意识,实现人生蜕变,并且培养一万名潜意识开发导师 这么宏大的一个目标,怎么让…

B-树底层原理

一、B-树介绍 定义: B-树(B-Tree)是一种自平衡的树形数据结构,广泛应用于数据库和操作系统中。它的设计目标是减少搜索、顺序访问、插入和删除操作中比较次数和移动次数,特别适合于磁盘中数据的存储和检索。 性质&a…

运维团队日志管理策略参考

在运维工作中,日志管理是一项至关重要的任务。有效的日志管理不仅能够帮助运维团队实时监控系统状态、发现潜在问题,还能为故障排查和系统性能优化提供宝贵的数据支持。本文结合运维行业的实际需求,介绍了一套全面的日志管理策略,…

AutoDroid: LLM-powered Task Automation inAndroid论文学习

光看题目怎么和上一篇差不多?又是纯用LLM的? 当然还是有一点不一样的: 这里的最大特点是加上了UI领域知识,可以大幅增强LLM在处理UI方面的知识的能力。根据文章的说法,使用了这招他们的LLM可以吊打GPT4V,准…

node.js 完全卸载和下载配置

一、介绍 (1)node.js Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, [1]让JavaScript 运行在服务端的开发平台&#xff0c…

Linux开发工具的使用

文章目录 vim的使用基本模式介绍光标当前行操作光标快速定位(命令行模式):插入模式的三种方式(命令行模式):vim基本操作(命令行模式)底行模式的操作 Linux编译器 - gcc/g的使用Linux…

录屏软件免费版:四款热门工具全面解析!

日常生活或工作中,我们经常有记录屏幕的需求。今天,就让我们来探索几款市面上广受欢迎的免费录屏软件,它们不仅功能强大,而且完全免费,让屏幕录制体验更加流畅和高效。 福昕录屏大师 直达链接:www.foxits…

比亚迪海豹06这油耗,丈母娘都叫好

文 | AUTO芯球 作者 | 雷慢 刚一朋友问我 有没有什么好看、价格低, 车大、油耗还低的车, 开到女盆友家能第一个动筷子。 哎,我要给你说的这车, 能不能第一个动筷子 首先看你未来的丈母娘喜欢什么货色的, 其次你…

仿最近老火的羊了个羊 三消游戏源码,两种玩法模式,完整带后台

游戏玩儿法类似于养了个羊,有两种模式,一个是普通版。一个是王者荣耀版。 代码免费下载:百度网盘

广播与组播,超时检测

目录 一.超时检测 必要性 超时检测的设置方法 1. 通过函数自带的参数设置 2. 通过设置套接字属性进行设置 3. alarm函数与sigaction函数结合 二.广播与组播(broadcast & multicast) 1. 广播(udp) 理论&#xff1a…

redis底层—网络模型

1.用户空间和内核空间 2.阻塞IO 3.非阻塞IO 4.IO多路复用 select模式的三个问题: 能监听的FD最大不超过1024 每次select都需要把所有要监听的FD都拷贝到内核空间 每次都要遍历所有FD来判断就绪状态 poll模式的问题: poll利用链表解决了select中监听FD上限…

信号保存和处理

把上一篇回顾一下吧:共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,进程不再通过执行进入内核的系统调用来传递彼此的数据 共享内存的数据结构: struct shmid_ds {…

3D技术在电商行业的应用有哪些?

‌3D技术在电商行业的应用广泛且多样化,主要涵盖以下几个方面‌: ‌1、商品展示‌: 通过3D模型进行全方位的展示,支持720旋转和任意缩放,使消费者能够更直观地了解产品的外观、结构和特点。这种展示方式不仅提高了消…

前端网络请求库:Axios

目录 1. 网络请求的基本概念 1.1 网络请求的基础HTTP协议 1.2 HTTP工作原理 1.3 TCP连接 1.31 建立TCP连接 1.31 关闭TCP连接 1.4 HTTP的请求方法 1.5 HTTP的响应状态码分类 1.6. 前端网络请求方式 2. Axios在在vue项目中的使用 2.1安装与使用 2.2 Axios使用HTTP请求…

碰撞检测 | 详解圆-矩形碰撞检测与N圆覆盖模型(附ROS C++可视化)

目录 0 专栏介绍1 N N N圆覆盖碰撞模型2 圆与矩形的碰撞检测3 算法仿真与可视化3.1 核心算法3.2 仿真实验 0 专栏介绍 🔥课设、毕设、创新竞赛必备!🔥本专栏涉及更高阶的运动规划算法轨迹优化实战,包括:曲线生成、碰…

HCIP--<OSPF2>

目录 一,OSPF的不规则区域 1)远离骨干区域的非骨干区域 2)不连续骨干区域(和上面一样) 二,OSPF数据库表 三。优化OSPF的LSA(缺少LSA的更新量) [1]手工汇总:减少骨干区域的LSA [2]特殊区域&…

from T2I to T2V

生成图片 在Stable Diffusion推理过程中,其使用unet对一个初始化的向量不断去噪,并编入条件信息 c c c ,最后使用vae-decoder将其上采样为一张图片。 计算过程: f l a t e n t u n e t ( f l a t e n t ) , f l a t e n t ∈ R…

frida主动调用init_array中的函数

ida打开目标so,查看要主动调用的函数 前提是先过掉检测frida等等,然后控制台启动 输出so地址 Process.findModuleByName("libmod.so") New函数 var aa new NativeFunction(ptr(0x785e002000).add(0x134EC0),"void",[]) 主动调用 a…

三种方式可以将彩色图像转成灰度图对比

有三种方式可以将彩色图像转成灰度图 1、直接imread(“1.jpg” , 0);直接读取灰度图像 2、读取彩色图像然后 灰度 0.299 * 红色 0.587 * 绿色 0.114 * 蓝色进行转换 3、调用cvtColor函数cvtColor(srcImg, imgShow, COLOR_BGR2GRAY); 通过测试来对比三者的区别&…