在 Python 中测量脚本运行时间 [重复]
Posted
技术标签:
【中文标题】在 Python 中测量脚本运行时间 [重复]【英文标题】:Measure script running time in Python [duplicate] 【发布时间】:2014-01-19 09:29:42 【问题描述】:这个问题想了很久,找了好几处答案,都没有成功……
我的问题:如何衡量给定脚本完全完成所需的时间?
想象一下我有这个愚蠢的脚本来计算从 0 到 10^12 的所有数字的总和:
x = 0
for i in range(pow(10,12)):
x += i
print(x)
我怎么知道我的电脑花了多少时间来完成这项工作?
提前致谢, RSerao
【问题讨论】:
如果你想包含启动解释器的时间,只需运行time python script.py
。如果没有,您将不得不使用timeit
模块。
【参考方案1】:
我已经知道你可以做一件聪明的事:
import time
# at the beginning:
start_time = time.time()
# at the end of the program:
print("%f seconds" % (time.time() - start_time))
它不是 100% 准确,但对我的目的来说非常好
【讨论】:
【参考方案2】:您可以使用 python 分析器 cProfile 来测量 CPU time 以及每个函数内部花费了多少时间以及每个函数被调用了多少次。如果您想在不知道瓶颈在哪里的情况下提高脚本的性能,这将非常有用。 This answer 另一个 SO 问题非常好。看看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
【讨论】:
【参考方案3】:如果您正在寻找一个有用的单行代码并且正在使用 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
【讨论】:
以上是关于在 Python 中测量脚本运行时间 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Python包装脚本来测量另一个python文件的执行时间[重复]
python在powershell中运行脚本给出'非utf'错误[重复]
在python脚本中运行setenv linux命令[重复]