【记录】Python|Python3程序测试速度的整个流程、方法对比和选取方式
其他的博客太!长!了!我实在看不下去了,每次都不记得什么场景用什么函数。
让我来用表格总结一下各个函数的使用场景、特性。
并附上分别的测试速度的过程的样例代码。
使用场景、特性
这个表格提供了这些函数在不同方面的详细对比,方便根据具体需求选择合适的函数。
| 函数 | 使用场景 | 返回类型 | 精度 | 包含sleep时间 | 平台依赖性 | 特定点时间参考 | 特殊用途 | 最早支持版本 | 性能 |
|---|---|---|---|---|---|---|---|---|---|
time.time() |
时间格式化,测试代码时间 | 浮点数 | 取决于系统 | 是 | 高 | 无 | 获取当前时间的时间戳 | Python 初始版本 | 一般 |
time.time_ns() |
时间格式化,测试代码时间 | 整数 | 非常高精度 | 是 | 高 | 无 | 获取当前时间的时间戳,以纳秒为单位 | Python 3.7 | 高 |
time.perf_counter() |
测试代码时间 | 浮点数 | 高精度 | 是 | 低 | 是 | 性能测试和基准测试 | Python 3.3 | 非常高 |
time.perf_counter_ns() |
测试代码时间 | 整数 | 非常高精度 | 是 | 低 | 是 | 短时间间隔计时,以纳秒为单位 | Python 3.7 | 非常高 |
time.process_time() |
性能分析和优化 | 浮点数 | 适合CPU时间测量 | 否 | 低 | 无 | 精确的CPU时间分析和优化 | Python 3.3 | 高 |
time.process_time_ns() |
性能分析和优化 | 整数 | 非常高精度 | 否 | 低 | 无 | 精确的CPU时间分析和优化,以纳秒为单位 | Python 3.7 | 非常高 |
timeit.timeit() |
微基准测试 | 浮点数 | 高 | 取决于代码 | 低 | 无 | 重复执行小段代码的性能测试 | Python 2.6 | 高 |
time.clock() (已废弃) |
性能分析(在Python 3.3以后废弃) | 浮点数 | 取决于系统 | 否 | 高 | 无 | CPU时间测量 | Python 初始版本 | 中等(现已废弃) |
这个表格涵盖了Python中常用的几种测量代码运行速度的函数及其特性,可供选择最合适的工具进行性能测试。需要注意的是,time.clock()函数在Python 3.3及以后的版本中已被废弃,不建议使用。并且,性能评估是相对的,并且可能受到具体使用场景和系统配置的影响。
在这个表格中,系统时间调整影响表示函数返回的时间值是否可能受到系统时间更改的影响,适用场景是函数最典型的使用情境,特定点时间参考表示函数的时间计数是否从某个特定的时间点(如系统启动时)开始计算。这样的分类提供了更清晰的视角来理解和选择这些函数。
其中,由于 time.time_ns() 使用整数而不是浮点数,它还减少了与浮点数运算相关的精度损失和计算开销。整数运算通常比浮点数运算更快且更精确,这进一步提高了其性能表现。因此,在需要极高精度和性能的场合,time.time_ns() 是更优的选择。
样例代码
这里是使用Python中的不同时间测量函数来测试代码执行时间的样例代码:
time.time():import time start = time.time()
# 插入要测试的代码
time.sleep(1) # 示例:休眠1秒
end = time.time() print("执行时间:", end - start, "秒")
time.perf_counter():import time start = time.perf_counter()
# 插入要测试的代码
time.sleep(1) # 示例:休眠1秒
end = time.perf_counter() print("执行时间:", end - start, "秒")
time.process_time():import time start = time.process_time()
# 插入要测试的代码
for _ in range(1000000): # 示例:执行一个循环
pass
end = time.process_time() print("CPU执行时间:", end - start, "秒")
time.perf_counter_ns():import time start = time.perf_counter_ns()
# 插入要测试的代码
time.sleep(1) # 示例:休眠1秒
end = time.perf_counter_ns() print("执行时间:", end - start, "纳秒")
time.process_time_ns():import time start = time.process_time_ns()
# 插入要测试的代码
for _ in range(1000000): # 示例:执行一个循环
pass
end = time.process_time_ns() print("CPU执行时间:", end - start, "纳秒")
time.time_ns():import time start = time.time_ns()
# 插入要测试的代码
time.sleep(1) # 示例:休眠1秒
end = time.time_ns() print("执行时间:", end - start, "纳秒")
timeit.timeit():import timeit code_to_test = """
for _ in range(1000000):
pass
"""
execution_time = timeit.timeit(stmt=code_to_test, number=100) print("执行时间:", execution_time, "秒")
在这些示例中,你可以替换注释部分的代码,以测试你想要测量执行时间的实际代码段。
结尾声明
部分内容由GPT协助我整理完成,因为表格实在太难打了,使用的Prompt大意是:
1. 请根据你的知识将特性进一步细分,例如返回的类型、精度、其他特点,请将其他特点对比总结一下,同类的分一下类,根据你的知识库,完善这些函数别的特性,并请你将“其他特性”也分类归类,不要写成“其他特性”。现在请将你总结的全部使用场景、特性用表格总结,请你把你知道的能用来测Python程序的运行速度的函数都按照markdown表格进行总结。
2. 然后请分别输出各个函数用于测试代码时间的样例代码。
更多测试方法:python性能测试
本账号所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_46106285/article/details/134755192。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
【记录】Python|Python3程序测试速度的整个流程、方法对比和选取方式的更多相关文章
- Python入门-程序测试
1.功能测试 常规测试 #常规测试代码,一个模块写功能,一个模块调用功能 #=============模块1:gongneng_ceshi def func(v1, v2): return v1* v ...
- Python执行效率测试模块timei的使用方法与与常用Python用法的效率比较
timeit模块用于测试一段代码的执行效率 1.Timer类 Timer 类: __init__(stmt="pass", setup="pass", time ...
- Python的程序结构[2] -> 类/Class[2] -> 方法解析顺序 MRO
方法解析顺序 / MRO (Method Resolution Order) 关于方法解析顺序(MRO)的详细内容可以参考文末链接,这里主要对 MRO 进行简要的总结说明以及一些练习示例. 经典类和新 ...
- 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)
前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...
- 优雅地记录Python程序日志1:logging模块简介
本文摘自:https://zhuanlan.zhihu.com/p/31893724 本篇涉及: logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 前言 在使 ...
- 使用配置文件方式记录Python程序日志
开发者可以通过三种方式配置日志记录: 调用配置方法的Python代码显式创建记录器.处理程序和格式化程序. 创建日志配置文件并使用fileConfig() 函数读取. 创建配置信息字典并将其传递给di ...
- 优雅地记录Python程序日志2:模块组件化日志记录器
本文摘自:https://zhuanlan.zhihu.com/p/32043593 本篇将会涉及: logging的各个模块化组件 构建一个组件化的日志器 logging的模块组件化 在上一篇文章中 ...
- 怎么样通过编写Python小程序来统计测试脚本的关键字
怎么样通过编写Python小程序来统计测试脚本的关键字 通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数.业务函数需要修改,那么势必要找出那些引 ...
- 用python开发了一个简单apache web服务端范例,在win10 + apache2.4.9 + python3.5 测试成功
#!D:\Programs\Python\Python35-32\python.exe import cgi def htmlTop(): print("Content-type: ...
- python 实现九型人格测试小程序
用python实现九型人格测试,并把测试结果绘制成饼图,实现代码如下: # @Description: 九型人格 import xlrd, matplotlib.pyplot as plt data ...
随机推荐
- 在IDEA如何使用JProfiler性能分析
一.下载地址 https://www.ej-technologies.com/download/jprofiler/files 版本:11 激活码:L-J11-Everyone#speedzodiac ...
- 鸿蒙开发 - 支持导出,跨文件使用的自定义样式 AttributeModifier
我们在自定义组件的时候,无论是用 @Styles 还是 @Extend,都很难真正做到独立的封装样式,因为这两者都不支持导出,不可以跨文件调用 这篇文章主要介绍一个接口 AttributeModifi ...
- 动态编译 Java 的神器 Liquor v1.3.10 发布
Liquor 是一个开源的轻量级 Java 动态编译器(零依赖,40KB),它可以在运行时编译 Java 字符串代码片段.类.方法等. 源码地址:https://gitee.com/noear/liq ...
- 洛谷B4038 [GESP202409 三级] 平衡序列 题解
原题传送门 前言 当我以一种十分激动的心情参加了GESP的2024-9的三级考试时. 打开了此题,然后--自以为是的拿着暴力一顿乱写!然后TLE. 直到结束我还是没有想出来! (太菜了!!!) 以一种 ...
- AD 测试点覆盖率的统计
在用Altium Designer软件设计PCB时,有时会有统计这个工程的测试点覆盖率需求.在AD 中有2种类型的测试点:Fabrication testppoint(用于PCB的下线电气测试)和As ...
- spring官宣接入deepseek,真的太香了~
写在前面 经常逛Spring官网(https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html)的小伙伴会发现, Spr ...
- C++调用动态链接库DLL的隐式链接和显式链接基本方法小结
C++程序在运行时调用动态链接库,实现逻辑扩展,有两种基本链接方式:隐式链接和显式链接.下面就设立最基本情形实现上述链接. 创建DLL动态链接库 编辑头文件 mydll_3.h: #pragma on ...
- camunda工作流实战项目(表单设计器+流程编辑器,零代码创建流程)
该项目的plus版本已制作完成,文章链接 [plus版]camunda工作流实战项目 一.整体情况介绍 基于ruoyi平台和camunda工作流开发而成,结合bpmn.js流程编辑器和vform表单设 ...
- 池化层 Pooling Layer
写在前面:人生就是努力.搞不懂.躺平,循环. 文章结构 池化层的相对位置 在多通道任务中,池化层和卷积层的不同 重要的参数stride 与 kernel_size 大小的相对关系决定3种池化层 参数 ...
- 解决CondaError: Run 'conda init' before 'conda activate'
前言 使用 Anaconda 激活 python 环境,报错: conda activate deepseek7B CondaError: Run 'conda init' before 'conda ...