Python 的 time.clock() 与 time.time() 准确度如何?

2024-12-30 08:42:00
admin
原创
271
摘要:问题描述:在 Python 中,哪个更适合用于计时?time.clock() 还是 time.time()?哪一个更准确?例如:start = time.clock() ... do something elapsed = (time.clock() - start) 对阵start = time.time(...

问题描述:

在 Python 中,哪个更适合用于计时?time.clock() 还是 time.time()?哪一个更准确?

例如:

start = time.clock()
... do something
elapsed = (time.clock() - start)

对阵

start = time.time()
... do something
elapsed = (time.time() - start)

解决方案 1:

从 3.3 开始,time.clock()已被弃用,建议改用time.process_time()time.perf_counter()

之前在 2.7 版本中,根据时间模块文档

时间.时钟()

在 Unix 上,以浮点数形式返回当前处理器时间(以秒为单位)。精度(实际上“处理器时间”的含义)取决于同名 C 函数的精度,但无论如何,这是用于对 Python 或计时算法进行基准测试的函数。

在 Windows 上,此函数基于 Win32 函数 QueryPerformanceCounter() 返回自第一次调用此函数以来经过的挂钟秒数(浮点数)。精度通常优于一微秒。

此外,还有用于对代码片段进行基准测试的timeit模块。

解决方案 2:

简短的回答是:大多数情况下time.clock()会更好。但是,如果你正在对某些硬件进行计时(例如,你放入 GPU 中的某些算法),那么time.clock()将消除这个时间,time.time()这是剩下的唯一解决方案。

注意:无论使用何种方法,时间安排都取决于您无法控制的因素(过程何时切换、切换频率如何等),这对于 来说更糟糕,time.time()但也存在于 中time.clock(),因此您不应该只运行一个时间测试,而应该始终运行一系列测试并查看时间的平均值/方差。

解决方案 3:

其他人已回答有关:time.time()vs. 的问题time.clock()

但是,如果您为了基准测试/分析目的而对一段代码的执行进行计时,那么您应该查看一下该timeit模块。

解决方案 4:

要记住一件事:更改系统时间会产生影响,time.time()但不会time.clock()

我需要控制一些自动测试的执行。如果测试用例的某一步骤花费的时间超过给定的时间,则中止该 TC 并继续执行下一步。

但有时需要更改系统时间(以检查被测应用程序的调度程序模块),因此在将系统时间设置为未来几个小时后,TC 超时到期,测试用例被中止。我不得不从切换到time.time()才能time.clock()正确处理这个问题。

解决方案 5:

clock()-> 浮点数

返回自进程启动或第一次调用以来的 CPU 时间或实际时间clock()。其精度与系统记录的精度相同。

time()-> 浮点数

返回自纪元以来的当前时间(以秒为单位)。如果系统时钟提供秒的分数,则可能存在秒的分数。

通常time()更精确,因为操作系统存储进程运行时间的精度不如存储系统时间(即实际时间)

解决方案 6:

取决于你关心什么。如果你指的是挂钟时间(比如挂在墙上的时钟上的时间),time.clock() 不提供准确性,因为它可能管理 CPU 时间。

解决方案 7:

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

解决方案 8:

正如其他人所指出的time.clock(),不推荐使用 ,而建议使用 time.perf_counter()time.process_time(),但是 Python 3.7 引入了纳秒分辨率计时,包括time.perf_counter_ns()time.process_time_ns()time.time_ns(),以及其他 3 个函数。

这 6 个新的纳秒分辨率函数在PEP 564中有详细说明:

time.clock_gettime_ns(clock_id)

time.clock_settime_ns(clock_id, time:int)

time.monotonic_ns()

time.perf_counter_ns()

time.process_time_ns()

time.time_ns()

这些函数与没有 _ns 后缀的版本类似,但以 Python int 形式返回纳秒数。

正如其他人所指出的,使用该timeit模块来计时函数和小代码片段。

解决方案 9:

这种差异因平台而异。

例如,clock() 在 Windows 和 Linux 上有很大不同。

对于您所描述的示例,您可能需要“timeit”模块。

解决方案 10:

time.clock()在 Python 3.8 中被删除,因为它具有平台相关的行为:

  • 在Unix上,以秒表示的浮点数返回当前处理器时间。

  • Windows上,此函数以浮点数形式返回自第一次调用此函数以来经过的秒数

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 上执行的时间。睡眠、等待 Web 请求或仅执行其他进程的时间不计入此时间。

+ 使用`time.process_time()`
  • 挂钟时间:这指的是“挂在墙上的钟上”已经过了多少时间,即超出实际时间。

+ 使用`time.perf_counter()`


    - `time.time()`还可以测量挂钟时间,但可以重置,这样你就可以回到过去
    - `time.monotonic()`无法重置(单调 = 只能向前移动),但精度低于`time.perf_counter()`

解决方案 11:

我使用此代码比较两种方法。我的操作系统是 Windows 8、处理器核心 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

解决方案 12:

在 Unix 上,time.clock() 测量当前进程已使用的 CPU 时间量,因此它不适用于测量从过去某个时间点开始经过的时间。在 Windows 上,它将测量自第一次调用该函数以来经过的挂钟秒数。在任一系统上,time.time() 都将返回自纪元以来经过的秒数。

如果您编写的代码仅适用于 Windows,则两者都可以工作(尽管您将以不同的方式使用它们 - time.clock() 不需要减法)。如果要在 Unix 系统上运行,或者您想要保证可移植的代码,您将需要使用 time.time()。

解决方案 13:

简短回答:在 Python 中使用time.clock()进行计时。

在 *nix 系统上,clock() 返回处理器时间作为浮点数,以秒为单位。在 Windows 上,它返回自第一次调用此函数以来经过的秒数,以浮点数表示。

time() 以浮点数形式返回自 UTC 纪元以来的秒数。无法保证您会获得比 1 秒更好的精度(即使 time() 返回浮点数)。还请注意,如果在两次调用此函数之间已将系统时钟调回,则第二次函数调用将返回较低的值。

解决方案 14:

据我所知,time.clock() 的精度与系统允许的精度一样。

解决方案 15:

正确答案:它们都是相同长度的分数。

但是哪个更快subjecttime

一个小测试用例

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()是内部计数器,因此不能在外部使用,有限制max 32BIT FLOAT,如果不存储第一个/最后一个值,就无法继续计数。无法合并另一个计数器...

解决方案 16:

比较 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
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2500  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1541  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   16  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   23  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   26  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用