perf script 执行时间_在Python中准确地测量代码执行时间
测量代码执行时间是困难的。学习如何消除系统和随机测量误差,并获得更可靠的结果。
我们经常需要测量代码的特定部分执行需要多长时间。不幸的是,简单地测量函数调用之前和之后的系统时间并不是很严谨,而且容易受到系统和随机测量错误的影响。这对于测量非常短的间隔(< 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()的用法。
英文原文:https://knasmueller.net/measure-code-execution-time-accurately-in-python
译者:忧郁的红秋裤
perf script 执行时间_在Python中准确地测量代码执行时间相关推荐
- python代码斜率_在Python中准确地测量代码执行时间
测量代码执行时间是困难的.学习如何消除系统和随机测量误差,并获得更可靠的结果. 我们经常需要测量代码的特定部分执行需要多长时间.不幸的是,简单地测量函数调用之前和之后的系统时间并不是很严谨,而且容易受 ...
- python测试代码运行时间_在Python中准确地测量代码执行时间
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 测量代码执行时间是困难的.学习如何消除系统和随机测量误差,并获得更可靠的结果. 我们经常需要测量代码的特定 ...
- python获取类的类属性_在python中获取类和实例的属性
在Python中工作下一个代码: class MyClass(object): field = 1 >>> MyClass.field 1 >>> MyClass( ...
- python正弦函数拟合_在Python中拟合正弦数据
我想将下面附带的数据与-a*sin(b*x + c)(或可能也可以使用-a*sin(2*x))与a b c作为要确定的值的函数拟合.我使用了scipy.optimize.curve_fit,但效果不好 ...
- python处理大型矩阵_在python中处理大型密集矩阵
基本上,在 python中存储和使用密集矩阵的最佳方法是什么? 我有一个项目,可以在数组中的每个项目之间生成相似度量. 每个项目都是一个自定义类,并存储一个指向另一个类的指针和一个表示它与该类&quo ...
- python中main的作用_浅析python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法
似乎有一个比以下更简单的方法: 1 2 3import string s ="string. With. Punctuation?" # Sample string out = s ...
- python对象引用计数器_在Python中借助计数器对象对项目进行计数
python对象引用计数器 前提 (The Premise) When we deal with data containers, such as tuples and lists, in Pytho ...
- python如何查看有什么模块_在python中如何查看模块功能
在python中查看模块功能的方法:1.在python命令行输入help()函数进入help帮助文档界面:2.键入[modules]列出当前所有安装的模块:3.键入相应的模块名称即可得到该模块的功能信 ...
最新文章
- 利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI
- SpringBoot中整合Mail实现发送模板邮件
- cpu 内存占用比较高的解决方案
- 用不好PPT模板的本质原因是什么,怎么办
- 在JDK 10中不可变与不可修改
- CentOS安装SVN客户端
- 手机modem开发(20)---公平性测试
- SQLi-LABS Less-2,联合注入+报错注入
- 酷客多小程序携手Richly network Pte Led正式进军新加坡市场
- Java数据结构——用链表实现栈
- live2d内嵌html,博客(网页)添加 Live2D 看板娘
- 单片机音乐倒数计时器c语言,基于单片机音乐倒数计时器设计.doc
- 小笨狼与LLDB的故事
- Cadence快捷键设置
- 估值15.59亿,融资15亿,百合网的新三板孤注一掷,局中有局!
- emule最新服务器地址,关于emule 服务器列表
- 几乎零基础的git入门级分享
- 睡个“好”觉,还真是有益身心胖瘦的
- Python turtle画小猪佩奇
- Springboot中使用阿里云短信验证码服务
热门文章
- SQL Server数据库表锁定原理以及如何解除表的锁定
- Win10开机提示蓝屏错误ntoskrnl.exe怎么修复?
- ubuntu 一张网卡绑定多个ip
- 计算机网络2020秋--第四次测验
- 升级node,老的项目启动不了的解决方法(亲测有效)
- Promise--优雅的异步回调解决方案
- Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException 异常
- XSS 跨站脚本攻击 的防御解决方案
- Polymer元素和AngularJS指令有什么区别?
- 在PostgreSQL中创建数据库的副本