Measure Code Execution Time Accurately in Python

栏目: IT技术 · 发布时间: 6年前

内容简介:Measuring code execution times is hard. Learn how to eliminate systematic and random measurement errors and obtain more reliable results.We often need to measure how long a specific part of code takes to execute. Unfortunately, simply measuring the system

Measuring code execution times is hard. Learn how to eliminate systematic and random measurement errors and obtain more reliable results.

We often need to measure how long a specific part of code takes to execute. Unfortunately, simply measuring the system time before and after a function call is not very robust and susceptible to systematic and random measurement errors. This is especially true for measuring very short intervals (< 100 milliseconds).

Systematic and Random Errors

So what is wrong with the following way of measuring?

time_start = time.time()
my_function()
time_end = time.time()
execution_time = time_end - time_start

First, there is a systematic error : by invoking time.time() , an unknown amount of time is added to the execution time of my_function() . How much time? This depends on the OS, the particular implementation and other uncontrollable factors.

Second, there is a random error : the execution time of the call to my_function() will vary to a certain degree.

We can combat the random error by just performing multiple measurements and taking the average of those. However, it is much more challenging to remove the systematic error.

Straight Line Fitting

Carlos Moreno and Sebastian Fischmeister presented a novel technique to combat this systematic error. The basic idea is to first measure the time of one function call, then the time of two , then the time of three, and so on. The resulting method may look like this:

time_1 = time.time()
my_function()
time_2 = time.time()
my_function()
my_function()
time_3 = time.time()
my_function()
my_function()
my_function()
time_4 = time.time()
# ...

You can then fit a straight line through the measurements:

Measure Code Execution Time Accurately in Python

The overall execution time can then be obtained by taking the slope a from the straight line y = a x + b .

In the above example, the straight line is y = 205.91 x + 29.56 ; therefore, the execution time equals 205.91 milliseconds.

The authors note that this type of measurement is very robust against occasional measurements with large errors. This can be visualized by artificially changing the 4th measurement and rerunning the line fitting process:

Measure Code Execution Time Accurately in Python

Even though one value is completely off, the resulting slope (201.15) is still very close to the previously measured value.

To learn more about the mathematical basics of this method, I invite you to read the original paper: https://uwaterloo.ca/embedded-software-group/sites/ca.embedded-software-group/files/uploads/files/ieee-esl-precise-measurements.pdf

Python Implementation

You can find my implementation of the presented algorithm in my public GitLab repository:

https://gitlab.com/bernhard.knasmueller/accurate-time-measurements-python

All credit for the algorithm and the idea goes to Moreno and Fischmeister.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

必然

必然

凯文·凯利 (Kevin Kelly) / 周峰、董理、金阳 / 译言·东西文库/电子工业出版社 / 2016-1-1 / 58

《必然》的作者凯文·凯利,被称为“硅谷精神之父”和“世界互联网教父”。前两部《失控》和《科技想要什么》在中国出版后,引起巨大反响。书中凯文·凯利对十二种必然的科技力量加以详细的阐述,并描绘出未来三十年这些趋势如何形成合力指引我们前行的方向。 作者凯文·凯利基于过往从业经历和对未来趋势的敏锐观察对十二个关键词“形成”“知化”“流动”“屏读”“使用”“共享”“过滤”“重混”“互动”“追踪”“提问......一起来看看 《必然》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器