协慌网

登录 贡献 社区

测量 Python 中经过的时间?

我想要的是开始在我的代码中的某个地方计算时间,然后获得通过的时间,以测量执行少量功能所花费的时间。我认为我使用的是 timeit 模块错误,但文档对我来说只是让人困惑。

import timeit

start = timeit.timeit()
print "hello"
end = timeit.timeit()
print end - start

答案

如果您只想测量两点之间经过的挂钟时间,可以使用time.time()

import time

start = time.time()
print("hello")
end = time.time()
print(end - start)

这给出了以秒为单位的执行时间。

3.3 之后的另一个选择可能是使用perf_counterprocess_time ,具体取决于您的要求。在 3.3 之前,建议使用time.clock (感谢Amber )。但是,它目前已被弃用:

在 Unix 上,将当前处理器时间返回为以秒为单位的浮点数。精确度,实际上是 “处理器时间” 含义的定义,取决于同名 C 函数的精度。

在 Windows 上,此函数返回自第一次调用此函数以来经过的挂钟秒,作为浮点数,基于 Win32 函数QueryPerformanceCounter() 。分辨率通常优于 1 微秒。

从版本 3.3 开始不推荐使用 :此函数的行为取决于平台:根据您的要求, 使用perf_counter()process_time()获得明确定义的行为。

使用timeit.default_timer而不是timeit.timeit 。前者提供了平台上可用的最佳时钟和自动版本的 Python:

from timeit import default_timer as timer

start = timer()
# ...
end = timer()
print(end - start) # Time in seconds, e.g. 5.38091952400282

timeit.default_timer根据操作系统分配给 time.time()或 time.clock()。在 Python 3.3 + 上, default_timer在所有平台上都是time.perf_counter() 。请参阅Python - time.clock()与 time.time() - 准确度?

也可以看看:

仅限 Python 3:

由于从Python 3.3 开始不推荐使用time.perf_counter() ,因此您需要将time.perf_counter()用于系统范围的计时,或者将time.perf_counter() time.process_time()用于进程范围的计时,就像您以前使用time.clock()

import time

t = time.process_time()
#do some stuff
elapsed_time = time.process_time() - t

新功能process_time将不包括睡眠期间经过的时间。