当前位置: 首页 > news >正文

python使用装饰器记录方法耗时

思路

python使用修饰器记录方法耗时,目的是每当方法执行完后,可以记录该方法耗时,而不需要在每个方法的执行前后,去创建一个临时变量,来记录耗时。

方式一(不推荐):

在每个方法的执行前后,去创建一个临时变量,来记录耗时,代码如下,缺点在于,如果有10个、100个方法,那不得写10次、100次?且这样去写,容易写漏,而且过于冗余

def fun():# 开始计时start_time = time.time()# 模拟耗时time.sleep(2)# 停止计时end_time = time.time()print("fun01执行喽")

方式二(推荐):

使用装饰器来记录耗时,好处在于,将其标注在需要记录的方法前,这样的做法,相当于将这个方法,传递给另一个方法中。让方法A去执行方法B(俗称:套娃)。
这样的好处在于,我们只需要做标注,不用去改动到需要记录耗时的方法中的内容,这样可以减少出错和冗余,代码如下:

import time
# 使用装饰器,记录方法执行耗时
def timer(method_name):def decorator(func):def wrapper(*args, **kwargs):# 开始计时start_time = time.time()# 执行方法result = func(*args, **kwargs)# 停止计时end_time = time.time()# 统计耗时并输出execution_time = end_time - start_timelog = "{} 执行耗时: {:.2f} 秒".format(method_name, execution_time)print(log)return resultreturn wrapperreturn decorator# 方法1 使用装饰器标注
@timer("fun01()")
def fun01():# 模拟耗时time.sleep(2)print("fun01执行喽")# 方法2 不使用任何标注
def fun02():# 模拟耗时time.sleep(1)print("fun02执行喽")# 方法3 使用装饰器标注
@timer("fun03()")
def fun03():# 模拟耗时time.sleep(3)print("fun03执行喽")# 顺序执行fun01、02和03
fun01()
fun02()
fun03()

代码直接执行,可以看到如下的输出:
1.输出fun01()“执行喽”,却输出耗时是2.01秒,因为这里sleep了2秒,且使用了装饰器。
2.输出fun02()“执行喽”,但未记录执行耗时,原因是这里并未使用“装饰器”记录方法的耗时。
3.输出fun03()“执行喽”,却输出耗时是3.00秒,因为这里sleep了3秒,且使用了装饰器。
在这里插入图片描述

整理不易!

点赞!关注呗!

相关文章:

python使用装饰器记录方法耗时

思路 python使用修饰器记录方法耗时,目的是每当方法执行完后,可以记录该方法耗时,而不需要在每个方法的执行前后,去创建一个临时变量,来记录耗时。 方式一(不推荐): 在每个方法的…...

JavaWeb课程学习--Day01

HTML 建立css文件&#xff1a; css使用方式&#xff1a; <span>...</span>无语意包裹标签 css中的三种选择器&#xff1a; 注意&#xff1a;播放视音频时要留出播放空间 盒子模型&#xff1a; 表格标签&#xff1a; 以上表格&#xff1a; 表单标签&#xff1a; 表…...

Spring Boot单元测试使用MockBean注解向Service注入Mock对象

1. 背景介绍 我们在测试时有一个Service&#xff0c;我们需要测试Service&#xff0c;但Service内部依赖ServiceA、ServiceB&#xff0c;此时我们希望Mock ServiceA&#xff0c;ServiceB 注入真实对象。 class Service {private ServiceA A;private ServiceB B;public int me…...

Java中使用instanceof判断对象类型

记录&#xff1a;470 场景&#xff1a;Java中使用instanceof判断对象类型。例如在解析JSON字符串转换为指定类型时&#xff0c;先判断类型&#xff0c;再定向转换。在List<Object>中遍历Object时&#xff0c;先判断类型&#xff0c;再定向转换。 版本&#xff1a;JDK 1…...

postman测试后端增删改查

目录 一、本文介绍 二、准备工作 &#xff08;一&#xff09;新建测试 &#xff08;二&#xff09;默认url路径查看方法 三、增删改查 &#xff08;一&#xff09;查询全部 &#xff08;二&#xff09;增加数据 &#xff08;三&#xff09;删除数据 &#xff08;四&…...

根据源码,模拟实现 RabbitMQ - 通过 SQLite + MyBatis 设计数据库(2)

目录 一、数据库设计 1.1、数据库选择 1.2、环境配置 1.3、建库建表接口实现 1.4、封装数据库操作 1.5、针对 DataBaseManager 进行单元测试 一、数据库设计 1.1、数据库选择 MySQL 是我们最熟悉的数据库&#xff0c;但是这里我们选择使用 SQLite&#xff0c;原因如下&am…...

1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡

一、基于CentOS7和、构建LVS-DR群集 准备四台虚拟机 ip作用192.168.27.150客户端192.168.27.151LVS192.168.27.152RS192.168.27.152RS 关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld安装ifconfig yum install net-tools.x86_64 -y1、DS上 1.1 配置LVS虚拟IP …...

android 如何分析应用的内存(十七)——使用MAT查看Android堆

android 如何分析应用的内存&#xff08;十七&#xff09;——使用MAT查看Android堆 前一篇文章&#xff0c;介绍了使用Android profiler中的memory profiler来查看Android的堆情况。 如Android 堆中有哪些对象&#xff0c;这些对象的引用情况是什么样子的。 可是我们依然面临…...

Spring 使用注解储存对象

文章目录 前言存储 Bean 对象五大注解五大注解示例配置包扫描路径读取bean的示例 方法注解 Bean Bean 命名规则重命名 Bean 前言 通过在 spring-config 中添加bean的注册内容&#xff0c;我们已经可以实现基本的Spring读取和存储对象的操作了&#xff0c;但在操作中我们发现读…...

一、初始 Spring MVC

文章目录 一、回顾 MVC 模式二、初始 Spring MVC2.1 Spring MVC 核心组件2.1.1 前端控制器&#xff08;DispatcherServlet&#xff09;2.1.2 处理器映射器&#xff08;HandlerMapping&#xff09;2.1.3 处理器适配器&#xff08;HandlerAdapter&#xff09;2.1.3 后端控制器&am…...

《爬虫》爬取页面图片并保存

爬虫 前言代码效果 简单的爬取图片 前言 这几天打算整理与迁移一下博客。因为 CSDN 的 Markdown 编辑器很好用 &#xff0c;所以全部文章与相关图片都保存在 CSDN。而且 CSDN 支持一键导出自己的文章为 markdown 文件。但导出的文件中图片的连接依旧是 url 连接。为了方便将图…...

【项目部署】JavaScript解析JSON解析报错Unexpected token xxx is not valid JSON

问题背景 这个报错发生在之前部署的一个前后端分离的项目中。后端使用的Spring Boot&#xff0c;前端使用的JavaScript&#xff0c;前后端交互使用Thymeleaf框架。 现象 项目组的另一个小伙伴说&#xff0c;突然有个页面打不开了&#xff0c;整个页面全空白。我F12打开浏览器…...

做接口测试如何上次文件

在日常工作中&#xff0c;经常有上传文件功能的测试场景&#xff0c;因此&#xff0c;本文介绍两种主流编写上传文件接口测试脚本的方法。 首先&#xff0c;要知道文件上传的一般原理&#xff1a;客户端根据文件路径读取文件内容&#xff0c;将文件内容转换成二进制文件流的格式…...

Java SPI机制详解-01

1. 概述 SPI&#xff08;Service Provider Interface&#xff09;&#xff0c;是 Java 6 引入了一个内置功能&#xff0c;实现服务提供发现和加载机制&#xff0c;使之与特定接口的匹配。 SPI 机制的核心思想就是 解耦 &#xff0c;将装配的控制权移到程序之外&#xff0c;这…...

由浅入深C系列六:C中实现字符串trim的功能

C中实现字符串trim的功能 简介设计思路代码实现运行效果 简介 一个项目中&#xff0c;需要用c语言实现对字符串中的字定字符进行过滤并从字符串的删除&#xff0c;查询了C语言的基本库&#xff0c;没有发现有这样的函数&#xff0c;于是发挥程序员的主观能力性&#xff0c;自力…...

博客网站添加复制转载提醒弹窗Html代码

网站如果是完全禁止右键&#xff08;复制、另存为等&#xff09;操作&#xff0c;对用户来说体验感会降低&#xff0c;但是又不希望自己的原创内容直接被copy&#xff0c;今天飞飞和你们分享几行复制转载提醒弹窗Html代码。 效果展示&#xff1a; 复制以下代码&#xff0c;将其…...

ubuntu下nfs服务安装

操作系统&#xff1a;ubuntu22.04.2 一、服务端安装与配置 1、在服务端安装nfs服务端组件 sudo apt install nfs-kernel-server 2、创建共享目录share并且授权所有人可以访问 sudo mkdir /shared sudo chmod -R 777 /shared 3、配置nfs sudo vim /etc/exports 这将允许…...

Unity框架学习--2

接上文 IOC 容器是一个很方便的模块管理工具。 除了可以用来注册和获取模块&#xff0c;IOC 容器一般还会有一个隐藏的功能&#xff0c;即&#xff1a; 注册接口模块 抽象-实现 这种形式注册和获取对象的方式是符合依赖倒置原则的。 依赖倒置原则&#xff08;Dependence I…...

WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS

WebRTC音视频通话-实现GPUImage视频美颜滤镜效果 在WebRTC音视频通话的GPUImage美颜效果图如下 可以看下 之前搭建ossrs服务&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话&#xff0c;可以查…...

82. 删除排序链表中的重复元素 II

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;设置一个新的哑元节点result&#xff0c;作为头节点&#xff0c;将head中不重复地节点依次链接到哑元节点后面&#xff0c;最后返回result.next 初始值&…...

MySQL+计算机系统的生命周期的庖丁解牛

它的本质是&#xff1a;理解一条 SQL 语句如何从文本字符串&#xff0c;经过网络协议栈、操作系统内核、文件系统、存储引擎&#xff0c;最终转化为磁盘磁头/闪存颗粒的物理状态变化&#xff0c;以及数据如何反向流动回到客户端的全过程。这不仅是数据库查询&#xff0c;更是 C…...

kube-capacity企业级应用:大规模集群资源管理的10个最佳实践

kube-capacity企业级应用&#xff1a;大规模集群资源管理的10个最佳实践 【免费下载链接】kube-capacity A simple CLI that provides an overview of the resource requests, limits, and utilization in a Kubernetes cluster 项目地址: https://gitcode.com/gh_mirrors/ku…...

实战解析 | 第七弹:PiPER集成LeRobot运动控制平滑优化

1. 从机械臂抖动问题说起 第一次看到PiPER机械臂执行任务时的抖动画面&#xff0c;让我想起新手司机开手动挡汽车的情景——明明想平稳起步&#xff0c;却总是一顿一顿的往前窜。这种运动不流畅的问题在模仿学习场景中尤为常见&#xff0c;特别是当我们把LeRobot的ACT算法移植到…...

TsubakiTranslator:Galgame实时翻译完整指南与终极方案

TsubakiTranslator&#xff1a;Galgame实时翻译完整指南与终极方案 【免费下载链接】TsubakiTranslator 一款Galgame文本翻译工具&#xff0c;支持Textractor/剪切板/OCR翻译 项目地址: https://gitcode.com/gh_mirrors/ts/TsubakiTranslator 还在为语言障碍而无法畅玩心…...

我最骄傲的Python项目:判断力、取舍与排障能力,如何把一次“救火”项目变成团队能力跃升的催化剂

我最骄傲的Python项目&#xff1a;判断力、取舍与排障能力&#xff0c;如何把一次“救火”项目变成团队能力跃升的催化剂 &#x1f4cc; 开篇&#xff1a;为什么在Python生态里&#xff0c;技术从来不是终点 客观来看&#xff0c;Python自1991年诞生以来&#xff0c;以简洁优雅…...

从样式崩溃到完美渲染:MathLive静态CSS资源路径重构全解析

从样式崩溃到完美渲染&#xff1a;MathLive静态CSS资源路径重构全解析 【免费下载链接】mathlive Web components for math display and input 项目地址: https://gitcode.com/gh_mirrors/ma/mathlive 你是否在升级MathLive后遭遇了数学公式样式完全消失的尴尬&#xff…...

测试数据管理:AI解决方案大比拼

在数字化转型的浪潮中&#xff0c;软件测试从业者面临的核心挑战之一是高效管理测试数据。测试数据作为质量保障的基石&#xff0c;直接影响缺陷检出率、测试覆盖度和发布周期。传统方法依赖手动生成和脱敏&#xff0c;不仅耗时耗力&#xff0c;还常因数据多样性不足、安全风险…...

AI智能证件照制作工坊如何提升用户体验?前端交互优化建议

AI智能证件照制作工坊如何提升用户体验&#xff1f;前端交互优化建议 1. 项目核心价值与用户体验挑战 AI智能证件照制作工坊是一个基于Rembg抠图引擎的商业级证件照生产工具&#xff0c;它彻底改变了传统证件照的制作方式。用户只需上传一张普通生活照&#xff0c;AI就能自动…...

Sabaki围棋软件终极指南:免费优雅的围棋对弈与棋谱编辑器

Sabaki围棋软件终极指南&#xff1a;免费优雅的围棋对弈与棋谱编辑器 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki 如果你正在寻找一款既美观又功能强大的围棋软件&…...

终极工业管理革命:如何用DoubleQoL模组让《工业队长》效率提升300%

终极工业管理革命&#xff1a;如何用DoubleQoL模组让《工业队长》效率提升300% 【免费下载链接】DoubleQoLMod-zh 项目地址: https://gitcode.com/gh_mirrors/do/DoubleQoLMod-zh 你是否曾在《工业队长》中花费数小时等待生产线运转&#xff0c;或者因视角限制而无法全…...