如何在Python中测量经过时间?

2092 投票
41 回答
2807630 浏览
提问于 2025-04-17 01:58

我想测量一个函数执行的时间。但是我没能让timeit这个工具正常工作:

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

41 个回答

245

仅适用于Python 3:

因为从Python 3.3开始,time.clock()这个函数已经不再推荐使用了,所以你应该用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不会计算在休眠期间消耗的时间。

1166

使用 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() 的准确性比较

另外可以参考:

2506

使用 time.time() 可以测量两个时间点之间的实际经过时间:

import time

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

这个方法会返回执行时间,单位是秒。


如果你使用的是Python 3.3及以上版本,另一个选择是使用 perf_counterprocess_time,具体取决于你的需求。在3.3之前,推荐使用 time.clock(感谢 Amber)。不过,这个方法现在已经不推荐使用了:

在Unix系统上,这个函数返回当前的处理器时间,以浮点数表示,单位是秒。精度,以及“处理器时间”的定义,取决于同名的C语言函数。

在Windows系统上,这个函数返回自第一次调用该函数以来经过的实际秒数,以浮点数表示,基于Win32函数 QueryPerformanceCounter()。通常情况下,精度会好于一微秒。

自3.3版本起不推荐使用:这个函数的行为依赖于平台:请根据你的需求使用 perf_counter()process_time(),以确保行为明确。

撰写回答