Measure script running time in Python
本问题已经有最佳答案,请猛点这里访问。
我有这个问题很长一段时间了,我在几个地方寻找了答案,但没有成功。
我的问题是:如何衡量给定脚本完全完成所需的时间?
假设我有一个愚蠢的脚本来计算从0到10^12的所有数字之和:
1 2 3 4 | x = 0 for i in range(pow(10,12)): x += i print(x) |
我怎么知道我的电脑花了多少时间才能完成?
事先谢谢,拉塞罗
您可以使用python profiler cprofile来测量CPU时间以及每个函数内部花费的时间以及调用每个函数的次数。如果您想在不知道瓶颈在哪里的情况下提高脚本的性能,这非常有用。对另一个问题的回答是很好的。看一下医生也很好。
下面是一个如何从命令行使用cprofile分析脚本的示例:
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} |
如果您正在寻找一个有用的一行程序,并且正在使用ipython,那么
1 | %timeit [x for x in range(1000)] |
给予(在我的机器上):
1 | 10000 loops, best of 3: 37.1 μs per loop |
对于您的脚本,我将首先定义一个函数:
1 2 3 4 5 | def sumx(y,z): x = 0 for i in range(pow(y,z)): x += 1 print(x) |
然后这样做:
1 | %timeit sumx(5,7) |
它给出:
1 | 100 loops, best of 3: 4.85 ms per loop |
我已经知道你可以做一件聪明的事:
1 2 3 4 5 6 | import time # at the beginning: start_time = time.time() # at the end of the program: print("%f seconds" % (time.time() - start_time)) |
它不是100%准确,但对我来说是相当好的