关于性能:python代码的计时执行速度

Timing Execution Speed of Python Code

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Python: Time a code segment for testing performance (with timeit)

在C++中,可以很容易地对代码块进行计时,见下面的代码。有没有办法做这条Python?(轻而易举)谢谢!

1
2
3
4
5
6
7
time_t startTime = clock();

// Do stuff

time_t endTime = clock();

cout <<"Difference in time(milliseconds) :" << endTime - startTime << endl;


尝试使用标准库中提供的配置文件。

下面是一个如何使用命令行中的cProfile来分析脚本的示例。cProfile是所有python发行版中可用的配置文件之一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ python -m cProfile euler048.py

1007 function calls in 0.061 CPU seconds

Ordered by: standard name
ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000    0.061    0.061 <string>:1(<module>)
 1000    0.051    0.000    0.051    0.000 euler048.py:2(<lambda>)
    1    0.005    0.005    0.061    0.061 euler048.py:2(<module>)
    1    0.000    0.000    0.061    0.061 {execfile}
    1    0.002    0.002    0.053    0.053 {map}
    1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler objects}
    1    0.000    0.000    0.000    0.000 {range}
    1    0.003    0.003    0.003    0.003 {sum}

代码逐字翻译

1
2
3
4
5
import datetime
start = datetime.datetime.now()
// do stuff
finish = datetime.datetime.now()
print finish-start


您可能希望签出TimeIt模块,它非常方便为代码的小片段计时。

典型示例:

1
2
3
4
5
6
7
from timeit import Timer

def foo():
    # some code here

t1 = Timer("""foo()""","""from __main__ import foo""")
print t1.timeit(1000)  # runs foo() 1000 times and returns the time taken

我将把您想要计时的部分分解成一个函数,并在它周围放置一个计时装饰器,它会计时代码。

这节省了代码重复,并且增加了一个好处,即您可以使用计时统计信息存储/记录函数名和参数。