Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python';s time.clock()与time.time()的精确度?_Python_Time - Fatal编程技术网

Python';s 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

在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(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