我已经有这个问题了很长时间,我在几个地方寻找答案,但没有成功......
我的问题:如何衡量给定脚本完全完成所需的时间?
想象一下,我有这个愚蠢的脚本来计算0到10 ^ 12之间所有数字的总和:
x = 0
for i in range(pow(10,12)):
x += i
print(x)
我怎么知道我的电脑完成了多长时间?
提前致谢, RSerrao
答案 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