Python';s time.clock()与time.time()的精确度?
在Python中,哪一种用于计时更好?time.clock()还是time.time()?哪一个更准确 例如:Python';s time.clock()与time.time()的精确度?,python,time,Python,Time,在Python中,哪一种用于计时更好?time.clock()还是time.time()?哪一个更准确 例如: start = time.clock() ... do something elapsed = (time.clock() - start) vs 取决于你关心什么。如果您指的是墙上的时间(如墙上时钟上的时间),TIME.clock()不提供准确性,因为它可以管理CPU时间 clock()->浮点数 print(time.clock()); time.sleep(10); print
start = time.clock()
... do something
elapsed = (time.clock() - start)
vs
取决于你关心什么。如果您指的是墙上的时间(如墙上时钟上的时间),TIME.clock()不提供准确性,因为它可以管理CPU时间
clock()
->浮点数
print(time.clock()); time.sleep(10); print(time.clock())
# Linux : 0.0382 0.0384 # see Processor Time
# Windows: 26.1224 36.1566 # see Wall-Clock Time
返回自进程开始或之后的CPU时间或实时时间
第一次调用clock()
。这与系统的精度一样高
记录
time()
->浮点数
print(time.clock()); time.sleep(10); print(time.clock())
# Linux : 0.0382 0.0384 # see Processor Time
# Windows: 26.1224 36.1566 # see Wall-Clock Time
返回自历元以来的当前时间(以秒为单位)。
如果系统时钟提供小数秒,则可能会出现小数秒
通常
time()
更精确,因为操作系统存储进程运行时间的精度与存储系统时间(即实际时间)的精度不同简单的回答是:大部分时间time.clock()
会更好。
但是,如果您正在对某些硬件(例如,您在GPU中放入的某些算法)计时,则time.clock()
将消除此时间,并且time.time()
是剩下的唯一解决方案
注意:无论使用何种方法,计时将取决于您无法控制的因素(进程何时切换,多久切换一次),这在
time.time()
中更糟糕,但在time.clock()中也存在,因此您不应只运行一个计时测试,但始终要运行一系列测试并查看时间的平均值/方差。简短回答:在Python中使用time.clock()进行计时
在*nix系统上,clock()以浮点数形式返回处理器时间,以秒为单位。在Windows上,它以浮点数形式返回自第一次调用此函数以来经过的秒数
time()返回自历元起的秒数,以UTC为单位,作为浮点数。无法保证在1秒内获得更好的精度(即使time()返回一个浮点数)。另请注意,如果系统时钟已在两次调用此函数之间设置回原位,则第二次函数调用将返回较低的值。从3.3开始,建议使用或
先前在2.7中,根据:
time.clock()
在Unix上,以浮点数形式返回当前处理器时间
以秒表示。精确性,事实上就是定义
“处理器时间”的含义取决于C函数的含义
名称相同,但在任何情况下,这是用于
对Python或计时算法进行基准测试。
在Windows上,此函数返回自
根据
Win32函数QueryPerformanceCounter()。分辨率通常是
比一微秒好
此外,还有用于对代码片段进行基准测试的模块。回答了以下问题:time.time()
vs.time.clock()
但是,如果为了基准测试/评测目的而对代码块的执行进行计时,则应该查看Unix时间上的。。clock()测量当前进程使用的CPU时间量,因此,从过去的某个时间点测量经过的时间是不合适的。在Windows上,它将测量自第一次调用该函数以来经过的挂钟秒数。在任一系统上,time.time()将返回自历元以来经过的秒数
如果您正在编写仅适用于Windows的代码,则两者都可以工作(尽管您将以不同的方式使用这两种代码-time.clock()不需要减法)。如果这将在Unix系统上运行,或者您希望代码能够保证可移植,那么您将需要使用time.time()。区别在于平台特定
例如,Windows上的clock()与Linux上的非常不同
对于您描述的这类示例,您可能希望使用“timeit”模块。据我所知,time.clock()的精度与您的系统允许的精度一样。请记住一件事:
更改系统时间会影响time.time()
,但不会影响time.clock()
我需要控制一些自动测试的执行。如果测试用例的一个步骤花费的时间超过给定的时间量,则该TC被中止以继续下一个步骤
但有时需要一个步骤来更改系统时间(检查被测应用程序的调度程序模块),因此在未来几小时内设置系统时间后,TC超时过期,测试用例中止。我必须从time.time()
切换到time.clock()
,才能正确处理这个问题。time()
比Linux上的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
使用clock():
比较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
我用这段代码来比较两种方法。我的操作系统是Windows8,处理器核心是i5,RAM 4GB
import time
def t_time():
start=time.time()
time.sleep(0.1)
return (time.time()-start)
def t_clock():
start=time.clock()
time.sleep(0.1)
return (time.clock()-start)
counter_time=0
counter_clock=0
for i in range(1,100):
counter_time += t_time()
for i in range(1,100):
counter_clock += t_clock()
print "time() =",counter_time/100
print "clock() =",counter_clock/100
输出:
time() = 0.0993799996376
clock() = 0.0993572257367
正确答案:它们都是相同长度的分数。
但是如果主题
是时间
,哪个更快
一个小测试用例:
import timeit
import time
clock_list = []
time_list = []
test1 = """
def test(v=time.clock()):
s = time.clock() - v
"""
test2 = """
def test(v=time.time()):
s = time.time() - v
"""
def test_it(Range) :
for i in range(Range) :
clk = timeit.timeit(test1, number=10000)
clock_list.append(clk)
tml = timeit.timeit(test2, number=10000)
time_list.append(tml)
test_it(100)
print "Clock Min: %f Max: %f Average: %f" %(min(clock_list), max(clock_list), sum(clock_list)/float(len(clock_list)))
print "Time Min: %f Max: %f Average: %f" %(min(time_list), max(time_list), sum(time_list)/float(len(time_list)))
我不是在瑞士实验室工作,但我已经测试过了
基于这个问题:time.clock()
优于time.time()
编辑:time.clock()
是内部计数器,因此不能在外部使用,受到限制最大32位浮点值
,如果不存储第一个/最后一个值,则无法继续计数
print(time.clock()); time.sleep(10); print(time.clock())
# Linux : 0.0382 0.0384 # see Processor Time
# Windows: 26.1224 36.1566 # see Wall-Clock Time