【记录】Python|Python3程序测试速度的整个流程、方法对比和选取方式_python 效率测试-程序员宅基地

技术标签: python3  科普  python  速度  测试  

参考:Python3.7中time模块的time()、perf_counter()和process_time()的区别

其他的博客太!长!了!我实在看不下去了,每次都不记得什么场景用什么函数。
让我来用表格总结一下各个函数的使用场景、特性。
并附上分别的测试速度的过程的样例代码。

使用场景、特性

这个表格提供了这些函数在不同方面的详细对比,方便根据具体需求选择合适的函数。

函数 使用场景 返回类型 精度 包含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中的不同时间测量函数来测试代码执行时间的样例代码:

  1. time.time():

    import time
    
    start = time.time()
    # 插入要测试的代码
    time.sleep(1)  # 示例:休眠1秒
    end = time.time()
    
    print("执行时间:", end - start, "秒")
    
  2. time.perf_counter():

    import time
    
    start = time.perf_counter()
    # 插入要测试的代码
    time.sleep(1)  # 示例:休眠1秒
    end = time.perf_counter()
    
    print("执行时间:", end - start, "秒")
    
  3. time.process_time():

    import time
    
    start = time.process_time()
    # 插入要测试的代码
    for _ in range(1000000):  # 示例:执行一个循环
        pass
    end = time.process_time()
    
    print("CPU执行时间:", end - start, "秒")
    
  4. time.perf_counter_ns():

    import time
    
    start = time.perf_counter_ns()
    # 插入要测试的代码
    time.sleep(1)  # 示例:休眠1秒
    end = time.perf_counter_ns()
    
    print("执行时间:", end - start, "纳秒")
    
  5. 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, "纳秒")
    
  6. time.time_ns():

    import time
    
    start = time.time_ns()
    # 插入要测试的代码
    time.sleep(1)  # 示例:休眠1秒
    end = time.time_ns()
    
    print("执行时间:", end - start, "纳秒")
    
  7. 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。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46106285/article/details/134755192

智能推荐

ajax post导出excel(解决乱码问题)_ajax接收byte[]类型数据生成的excel乱码怎么办-程序员宅基地

文章浏览阅读5.2k次,点赞3次,收藏5次。当前有一个需求 前端对当前页面的数据做筛选之后需要将其导出至excel文件且发送的请求需传入需验证的参数如页面token信息尝试了form提交及其他方法后出现excel乱码等问题 最后用ajax成功完成了导出。直接贴代码:下面是解释:xhr.responseType = “arraybuffer”;这段代码不加会导致导出的excel出现乱码问题。xhr.onload内操作如下:使用..._ajax接收byte[]类型数据生成的excel乱码怎么办

Educoder---Java面向对象(第二章)封装、继承和多态_大花猫喵喵叫java-程序员宅基地

文章浏览阅读1.5w次,点赞30次,收藏143次。第一题声明一个Person类,私有化属性name和age,并将字段封装起来;在Person类中定义一个talk()方法,打印姓名和年龄信息;在main方法中声明并实例化一Person对象p,给p中的属性赋值,调用talk()方法打印 我是:张三,今年:18岁。测试说明测试输入:我是:张三,今年:18岁/********* begin *********/ // 声明并实例化一..._大花猫喵喵叫java

IDEA创建第一个Javaweb项目包括数据库连接_idea创建javaweb项目包括数据库连接-程序员宅基地

文章浏览阅读8.2k次,点赞39次,收藏182次。本文旨在让刚入门Java的新手能够创建第一个web项目,能够对Javaweb开发有一个基本的认识和了解。本文所用工具:Intellij IDEA,可在官网下载社区版或专业版,社区版是免费的。环境:jdk 12.0.2web服务器软件:tomcat 9.0.30数据库:MySQL 8.0.18 (不需数据库只需跳过后面部分即可)Java数据库连接驱动:jdbc 8.0.18jdbc下载教..._idea创建javaweb项目包括数据库连接

数据库课程设计:简易版超市信息管理系统(Java+MySQL)_数据库超市管理系统-程序员宅基地

文章浏览阅读7.2w次,点赞35次,收藏247次。分享一个简单的Java+JDBC+MySQL数据库开发的简易版超市管理系统,完成简单的基础功能,如登录验证,进货管理,售货管理,信息查询等等,适合做课程设计呢,喜欢的小伙伴可以来看看呢实现功能:库存管理销售管理信息查询系统进货售货库存查询 进货查询 售货查询退出超市数据库进货表(顺序码,条形码,进价,采购数量,采购日期)售货表(顺序码,条形码,数量,零售价,日期时间)库存表(条形码,商品名称,库存量,生产厂商,商品规格,零售价)用户表(顺序码,用户名._数据库超市管理系统

史上最全BI知识全解,万字长文带你读懂BI-程序员宅基地

文章浏览阅读487次。这种独立的、单独的面向前端的商业智能BI分析工具,他们更多的定位是部门级和个人级的商业智能BI 分析工具,对于深层次的需要复杂数据处理、集成、建模等很多场景是无法解决的。从市场宣传和销售的角度来说,简化产品的复杂度和上手难度的宣传是没有问题的,有问题的是以一种错误的讲解、不专业的讲解最终误导企业接受了这些不正确的概念,并以这些不正确的概念来评估与规划 商业智能BI 项目的建设,没有充分预计到 商业智能BI 项目建设过程中可能会遇到的挑战与风险,最后导致项目的不成功与失败、反复建设。

华为数据湖的3大特点、6个标准、入湖流程_数据入湖的六个标准-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏22次。3大特点、6个标准、入湖流程01 数据湖的3个特点1. 逻辑统一2. 类型多样3. 原始记录02 数据入湖的6个标准1. 明确数据Owner2. 发布数据标准3. 认证数据源4. 定义数据密级5. 数据质量评估6. 元数据注册03 数据入湖方式1. 批量集成(Bulk/Batch Data Movement)2. 数据复制同步(Data Replication/Data Synchronization)3. 消息集成(Message-Oriented Movement of Data)4. 流集成(Stre_数据入湖的六个标准

随便推点

css中设置多张背景图片_css 多个背景图-程序员宅基地

文章浏览阅读1.4w次,点赞3次,收藏30次。有一些应用场景中,我们需要叠加设置多张图片,一般我们可能是采用img来设置,但还有一种更简单的方法,采用背景属性来设置,css提供了可同时设置多张背景图的属性。语法如下:.bg{ background: url('../img/bg1.png'), url('../img/bg2.png'), url('../img/bg3.png')}为不同的背景图片..._css 多个背景图

dataTables-使用详细说明整理,还有各种参数、回调方法-程序员宅基地

文章浏览阅读2.5w次。本文共四部分:官网 | 基本使用|遇到的问题|属性表一:官方网站:[http://www.datatables.net/]二:基本使用:[http://www.guoxk.com/node/jquery-datatables]1、DataTables的默认配置$(document).ready(function() {$('#example').dataTabl_datatables

联想笔记本电脑换掉原装系统后无法进BIOS不完美解决办法_电脑进不了bios-程序员宅基地

文章浏览阅读1.1w次。我一台联想笔记本电脑,之前的每张坏了,都不能恢复出厂。所以换了原装的win10系统,结果发现F2进了不BIOS,也不能修改启项,F12启动菜单也无效,都是直接进系统。网上逛了很久才找到解决办法,不完美,但可以解决。我不知道别的牌子机器是不是也这样,反正我的联想笔记本电脑是这样,而且我上网查了一下,很多联想笔记本都这样。只要是把原带的系统换掉,一定进不了BIOS。进BIOS的F2和启动设备菜单F12都没用,必须从恢复出厂页面进BIOS。刷BIOS可以解决,但联想刷BIOS程序要检测BIOS版本,如_电脑进不了bios

Vue使用ly-tab实现选项栏_lytab使用-程序员宅基地

文章浏览阅读543次,点赞9次,收藏8次。如果需要修改样式,直接查找到该HTML元素上的class类进行修改样式,修改的时候要使用!important 进行覆盖。使用ly-tab插件可以实现如下效果。1.安装ly-tab。_lytab使用

如何使用 PowerShell 锁定、解锁、启用和禁用 AD 帐户_power 脚本导出账号锁定解锁-程序员宅基地

文章浏览阅读3.1k次。Active Directory GUI 管理工具,如(ADUC),非常适合对单个帐户执行操作。但是当您需要处理多个AD帐户时,是一个更灵活的工具。在这篇文章中,我将向您展示如何使用 PowerShell 使用逗号分隔的文件单独和批量锁定、解锁、启用和禁用 AD 用户和计算机帐户。在运行 Active Directory PowerShell cmdlet 之前,必须在计算机上安装 PowerShell 的 Active Directory 模块。如果您使用的是Windows 10,请从。_power 脚本导出账号锁定解锁

标准C函数库头文件、POSIX标准库头文件和Windows API函数库头文件说明_posix api 头文件-程序员宅基地

文章浏览阅读2.8k次。1. 标准C函数库头文件名字源自描述<assert.h>包含断言宏,被用来在程序的调试版本中帮助检测逻辑错误以及其他类型的bug。<complex.h>C99一组操作复数的函数。<ctype.h>定义了一组函数,用来根据类型来给字符分类,或者进行大小写转换,而不关心所使用的字符集(通常是ASCII或其扩展字符集,也..._posix api 头文件

推荐文章

热门文章

相关标签