在Python中使用哪个更好?Time.clock()还是time.time()?哪一种更准确?
例如:
start = time.clock()
... do something
elapsed = (time.clock() - start)
vs.
start = time.time()
... do something
elapsed = (time.time() - start)
在Python中使用哪个更好?Time.clock()还是time.time()?哪一种更准确?
例如:
start = time.clock()
... do something
elapsed = (time.clock() - start)
vs.
start = time.time()
... do something
elapsed = (time.time() - start)
当前回答
在Linux上,time()比clock()具有更好的精度。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
使用时钟():
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
其他回答
正如其他人所注意到的,time.clock()已被弃用,取而代之的是time.perf_counter()或time.process_time(),但Python 3.7通过time.perf_counter_ns()、time.process_time_ns()和time.time_ns()以及其他3个函数引入了纳秒分辨率计时。
PEP 564中详细介绍了这6个新的纳秒分辨率函数:
time.clock_gettime_ns (clock_id) 时间。clock_settime_ns (clock_id、时间:int) time.monotonic_ns () time.perf_counter_ns () time.process_time_ns () time.time_ns () 这些函数类似于没有_ns后缀的版本,但是 返回一个纳秒数作为Python int。
正如其他人也注意到的那样,使用timeit模块为函数和小代码段计时。
简单的答案是:大多数时候time.clock()会更好。 然而,如果你正在为某些硬件计时(例如你在GPU中放入的某些算法),那么time.clock()将摆脱这个时间,而time.time()是唯一剩下的解决方案。
注意:无论使用何种方法,计时将取决于您无法控制的因素(进程何时切换,频率如何,……),这对于time.time()来说更糟糕,但对于time.clock()也存在,因此您永远不应该只运行一个计时测试,而是始终运行一系列测试并查看时间的均值/方差。
Clock() ->浮点数
返回CPU时间或进程启动后的实时时间 第一次调用clock()。这和系统的精度一样高 记录。
Time() ->浮点数
返回当前时间(以秒为单位)。 如果系统时钟提供,可能会出现几分之一秒。
通常time()更精确,因为操作系统存储进程运行时间的精度与存储系统时间(即实际时间)的精度不同。
对比Ubuntu Linux和Windows 7的测试结果。
在Ubuntu上
>>> start = time.time(); time.sleep(0.5); (time.time() - start)
0.5005500316619873
Windows 7操作系统
>>> start = time.time(); time.sleep(0.5); (time.time() - start)
0.5
这种差异是平台特有的。
例如,clock()在Windows上与Linux上有很大不同。
对于您描述的这类示例,您可能希望使用"timeit"模块。