python测试代码运行时间_在Python中准确地测量代码执行时间
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
测量代码执行时间是困难的。学习如何消除系统和随机测量误差,并获得更可靠的结果。
我们经常需要测量代码的特定部分执行需要多长时间。不幸的是,简单地测量函数调用之前和之后的系统时间并不是很严谨,而且容易受到系统和随机测量错误的影响。这对于测量非常短的间隔(< 100毫秒)来说尤其如此。
系统和随机误差
那么,下面这种测量方法有什么问题呢?
首先,这里会有一个系统误差:通过调用time.perf_counter(), 一个未知量的时间会被加入到my_function()的执行时间中。多少时间呢?这取决于操作系统、特定的实现和其他不可控因素。
其次,还存在一个随机误差:对my_function()调用的执行时间在一定程度上会有变化。
我们可以通过多次测量并取其平均值来抵抗随机误差。然而,消除系统误差的难度要大得多。
直线拟合
卡洛斯·莫雷诺和塞巴斯蒂安·菲什迈斯特提出了一种新技术来减小这种系统性错误。基本思想是首先测量一个函数调用的时间,然后测量两个函数调用的时间,然后测量三个函数调用的时间,依此类推。最终的方法可能是这样的:
然后你可以通过测量结果来拟合一条直线:
总执行时间可以通过获取该直线y = a x + b的斜率a得到。
在上面的例子中,直线是y = 205.91 x + 29.56;因此,执行时间等于205.91毫秒。
作者指出,这种测量方法对于偶尔会出现大误差的测量是非常可靠的。这可以通过人为地改变第4次测量并重新运行直线拟合过程来视觉化:
尽管有一个值是完全偏离的,但我们得出的斜率(201.15)仍然非常接近之前的测量值。
想要更多地了解这种方法的数学基础知识,我邀请你阅读这篇原创性论文:https://uwaterloo.ca/embedded-software-group/sites/ca.embedded-software-group/files/uploads/files/ieee-esl-precise-measurements.pdf
Python实现
你可以在我的公共GitLab仓库中找到我对所展示算法的实现:https://gitlab.com/bernhard.knasmueller/accurate-time-measurements-python
这个算法和想法都要归功于Moreno 和 Fischmeister。
编辑于2020年1月18日:更正了perf_counter()的用法。
相关文章
如何将你的PHP代码作为一个Composer包发布:https://knasmueller.net/how-to-publish-your-php-code-as-a-composer-package
你可以通过将你的库作为一个composer贡献给PHP社区来更容易地共享你的代码…
PHP 7.3中的尾逗号:https://knasmueller.net/trailing-commas-in-php-7-3
随着新的次要版本PHP 7.3的升级,函数调用中引入了尾逗号……英文原文:https://knasmueller.net/measure-code-execution-time-accurately-in-python
译者:忧郁的红秋裤
python测试代码运行时间_在Python中准确地测量代码执行时间相关推荐
- python代码斜率_在Python中准确地测量代码执行时间
测量代码执行时间是困难的.学习如何消除系统和随机测量误差,并获得更可靠的结果. 我们经常需要测量代码的特定部分执行需要多长时间.不幸的是,简单地测量函数调用之前和之后的系统时间并不是很严谨,而且容易受 ...
- perf script 执行时间_在Python中准确地测量代码执行时间
测量代码执行时间是困难的.学习如何消除系统和随机测量误差,并获得更可靠的结果. 我们经常需要测量代码的特定部分执行需要多长时间.不幸的是,简单地测量函数调用之前和之后的系统时间并不是很严谨,而且容易受 ...
- python测试抽奖脚本_使用 Python 写一个简易的抽奖程序
不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...
- python测试开发实战_《python测试开发实战》基于pytest基础部分实例1-Hello
要求 实现如下命令行接口 python 1hello.py -h usage: 1hello.py [-h] [-n NAME] Say hello optional arguments: -h, - ...
- 可爱的python测试开发库及项目(python测试开发工具库汇总)
转载: https://www.jianshu.com/p/ea6f7fb69501 可爱的python测试开发库及项目(python测试开发工具库汇总) github地址 相关书籍下载 Python ...
- python是非常依赖于已编译完成的代码吗_初识Python的几点疑惑
一.python是什么? Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991 ...
- python 变量类型注释_变量类型、命名规则及代码注释
人类在纸上可以写数字,也可以写文字,用数字来计算,用文字来说话,在人类的意识里你写的东西代表不同的含义!同样,在程序里面我们也按照人的习惯来设计,因此就有了变量类型这种说法!任何语言都会涉及到变量类型 ...
- python计算余弦距离_在Python中计算余弦距离的优化方法
如果可以使用SciPy,可以使用spatial.distance中的余弦值: 如果您不能使用SciPy,您可以尝试通过重写Python来获得一个小的加速(编辑:但是没有像我以前想像的那样工作,见下文) ...
- python 实例化父类对象_在Python中从现有超类实例化子类
所以我正在与第三方库进行交互,这会引发例外情况,但它基本上都会引发相同的异常(特别是suds.WebFault.但是,有可能从异常引发的数据中确定异常的确切类型.我希望将这个异常抽象为子类化这种类型的 ...
最新文章
- 转载_最值得阅读学习的10个C语言开源项目代码
- 解决 Windows 系统使用 Homestead 运行 Laravel 本地项目响应缓慢问题
- android仿ios弹框_在“提示”框中:iOS外观(在Android上运行),Google Maps作为Time Machine,下载Wii游戏保存...
- 实体框架 6.0:异步、IQueryable操作符和特性改进
- 【Codeforces633H】Fibonacci-ish II
- linux去除快捷方式箭头,焦点去除Win8快捷方式箭头软件
- transform模板函数调用tolower函数报错原因、解决办法
- php strtotime技巧,获取前几天、前几周、后几天、后几周,本月开始和本月结束时间
- c#实现任务栏气泡提醒
- 如何科学增长邮件订阅用户?
- 把时间当作朋友——第6章 交流
- 触发器flip-flop
- ORB-SLAM2的安装及试运行
- 500 – 内部服务器错误_无服务器:S3 – S3BucketPermissions –操作不适用于语句中的任何资源...
- 过了MySQL 8 OCP(1Z0-908),交一下作业
- Windows mobile 客户解决方案成功案例
- 滴滴出行A/B测试数据分析
- 共享wifi到底应该怎么样去运营呢?
- hashcat 2.哈希的装载
- Android硬件开发之——NFC技术
热门文章
- 洪水填充算法_区域填充算法和多边形填充的扫描线算法
- zen of python什么意思_Zen of Python
- 安装go client调用Kubernetes API
- 实际开发中的问题积累【积累】
- jquery 表单 清空
- opj1837 Balance(dp)
- System.IO命名空间
- python 通过索引迭代列表_python – NumPy – 迭代2D列表和打印(行,列)索引
- Ubuntu21.04安装网易有道词典
- OpenGL与gl glu glut freeglut glew glfw封装库关系(十五)