我需要测量程序某些部分所花费的时间(不是用于调试,而是作为输出中的功能)。准确性很重要,因为总时间将不到一秒钟。
当我遇到timeit时,我将使用time模块,该模块声称 避免了一些用于度量执行时间的常见陷阱 。不幸的是,它有一个糟糕的接口,需要一个字符串作为输入,然后才是eval的。 __
因此,我是否需要使用此模块来准确地测量时间,还是时间足够?它指的是什么陷阱?
谢谢
根据Python文档,它与不同操作系统中时间函数的准确性有关:
默认计时器功能取决于平台。在Windows上,time.clock()的粒度为微秒,但time.time()的粒度为1/60秒;在Unix上,time.clock()具有1/100秒的粒度,并且time.time()更精确。在这两个平台上,默认计时器功能都将测量挂钟时间,而不是CPU时间。这意味着在同一台计算机上运行的其他进程可能会干扰计时。在Unix上,可以使用time.clock()来测量CPU时间。
要直接从timeit.py的代码中提取:
timeit.py
if sys.platform == "win32": # On Windows, the best timer is time.clock() default_timer = time.clock else: # On most other platforms the best timer is time.time() default_timer = time.time
此外,它直接为您设置运行时代码。如果使用time,则必须自己做。这当然 可以节省您的时间
time
Timeit的设置:
def inner(_it, _timer): #Your setup code %(setup)s _t0 = _timer() for _i in _it: #The code you want to time %(stmt)s _t1 = _timer() return _t1 - _t0
从Python 3.3开始,您可以使用time.perf_counter()(系统范围内的计时)或time.process_time()(进程范围内的计时),仅使用以前的方式即可time.clock():
time.perf_counter()
time.process_time()
time.clock()
from time import process_time t = process_time() #do some stuff elapsed_time = process_time() - t
新功能process_time将不包括睡眠时间。
process_time
从Python 3.7开始,您还可以使用process_time_ns()与相似的方法,process_time()但是返回的时间以纳秒为单位。
process_time_ns()
process_time()