用Python测量脚本运行时间

时间:2014-01-01 23:32:45

标签: python python-3.x runtime

我已经有这个问题了很长时间,我在几个地方寻找答案,但没有成功......

我的问题:如何衡量给定脚本完全完成所需的时间?

想象一下,我有这个愚蠢的脚本来计算0到10 ^ 12之间所有数字的总和:

x = 0
for i in range(pow(10,12)):
    x += i
print(x)

我怎么知道我的电脑完成了多长时间?

提前致谢, RSerrao

3 个答案:

答案 0 :(得分:11)

您可以使用python profiler cProfile来测量CPU time以及每个函数内部花费的时间以及每个函数调用的次数。如果要在不知道瓶颈位置的情况下提高脚本性能,这非常有用。 This answer对另一个问题非常好。看看the docs也很好。

以下是如何使用命令行中的cProfile配置脚本的示例:

$ 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)

我已经知道你可以做一件聪明的事了:

import time
# at the beginning:
start_time = time.time()

# at the end of the program:
print("%f seconds" % (time.time() - start_time))

它不是100%准确,但它对我的目的来说非常好

答案 2 :(得分:2)

如果你正在寻找一个有用的单行并且正在使用IPython,那么%timeit魔术函数可能是有用的(链接帖子上没有提到这个,所以为了完整性而添加它):

%timeit [x for x in range(1000)]

给(在我的机器上):

10000 loops, best of 3: 37.1 µs per loop

对于你的脚本,我首先定义一个函数:

def sumx(y,z):
    x = 0
    for i in range(pow(y,z)):
        x += 1
    print(x)

然后做:

%timeit sumx(5,7)

给出了:

100 loops, best of 3: 4.85 ms per loop