哪个更适合用于Python中的计时?time.clock()或time.time()?哪一个提供更准确?
例如:
start = time.clock() ... do something elapsed = (time.clock() - start)
与
start = time.time() ... do something elapsed = (time.time() - start)
Jason Navarr.. 154
作为3.3,time.clock()已被弃用,并且它建议使用time.process_time()或time.perf_counter()来代替.
以前在2.7中,根据时间模块文档:
time.clock()
在Unix上,将当前处理器时间返回为以秒为单位的浮点数.精度,实际上是"处理器时间"含义的定义,取决于同名C函数的精度,但无论如何,这是用于对Python或时序算法进行基准测试的函数.
在Windows上,此函数返回自第一次调用此函数以来经过的挂钟秒,作为浮点数,基于Win32函数QueryPerformanceCounter().分辨率通常优于1微秒.
此外,还有用于对代码段进行基准测试的timeit模块.
作为3.3,time.clock()已被弃用,并且它建议使用time.process_time()或time.perf_counter()来代替.
以前在2.7中,根据时间模块文档:
time.clock()
在Unix上,将当前处理器时间返回为以秒为单位的浮点数.精度,实际上是"处理器时间"含义的定义,取决于同名C函数的精度,但无论如何,这是用于对Python或时序算法进行基准测试的函数.
在Windows上,此函数返回自第一次调用此函数以来经过的挂钟秒,作为浮点数,基于Win32函数QueryPerformanceCounter().分辨率通常优于1微秒.
此外,还有用于对代码段进行基准测试的timeit模块.
简短的回答是:大多数时候time.clock()
会更好.但是,如果您正在计算某些硬件(例如您放入GPU中的某些算法),那么time.clock()
将摆脱这一时间并且time.time()
是唯一的解决方案.
注意:无论使用哪种方法,时间都取决于你无法控制的因素(进程何时切换,频率,......),这种情况会更糟,time.time()
但也存在time.clock()
,所以你不应该只进行一次计时测试,但总是进行一系列的测试,看看时间的均值/方差.
其他人已经回答了:time.time()
vs time.clock()
.
但是,如果您为执行基准测试/分析目的而执行一段代码,则应该查看该timeit
模块.
要记住一件事:改变系统时间会影响time.time()
但不会影响time.clock()
.
我需要控制一些自动测试执行.如果测试用例的一个步骤花费的时间超过给定的时间,则TC将被中止以继续下一个.
但有时需要一个步骤来更改系统时间(检查被测应用程序的调度程序模块),因此在将来几个小时后设置系统时间后,TC超时到期并且测试用例中止.我必须切换time.time()
到time.clock()
正确处理这个问题.
clock()
- >浮点数
返回自进程开始或第一次调用以来的CPU时间或实时clock()
.这与系统记录一样精确.
time()
- >浮点数
返回自Epoch以来的当前时间(以秒为单位).如果系统时钟提供它们,则可以存在一秒的分数.
通常time()
更精确,因为操作系统不会以精确度存储系统时间(即实际时间)来存储进程运行时间
取决于你关心的是什么.如果你的意思是WALL TIME(就像你墙上的时钟一样),time.clock()提供NO准确性,因为它可以管理CPU时间.
因为我自己time()
比clock()
Linux 更精确.clock()
只有精度小于10毫秒.虽然time()
给出了完美的精度.我的测试是在CentOS 6.4,python 2.6上
using time(): 1 requests, response time: 14.1749382019 ms 2 requests, response time: 8.01301002502 ms 3 requests, response time: 8.01491737366 ms 4 requests, response time: 8.41021537781 ms 5 requests, response time: 8.38804244995 ms
using clock():
1 requests, response time: 10.0 ms 2 requests, response time: 0.0 ms 3 requests, response time: 0.0 ms 4 requests, response time: 10.0 ms 5 requests, response time: 0.0 ms 6 requests, response time: 0.0 ms 7 requests, response time: 0.0 ms 8 requests, response time: 0.0 ms
差异非常特定于平台.
例如,clock()在Windows上与在Linux上非常不同.
对于您描述的那种示例,您可能需要"timeit"模块.