在 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命令[重复]

在 Blender 脚本中测量路径长度?

如何在正在运行的python脚本中启动其他脚本(新线程或进程?)[重复]

需要从 Python 脚本运行 shell 命令并存储在变量中 [重复]