zoukankan      html  css  js  c++  java
  • Python测量时间,用time.time还是time.clock

    在计算机领域有多种时间。第一种称作CPU时间或执行时间,用于测量在执行一个程序时CPU所花费的时间。第二种称作挂钟时间,测量执行一个程序时的总时间。挂钟时间也被称作流逝时间或运行时间。与CPU时间相比,挂钟时间通常长些,因为CPU执行测量的程序可能同时还在执行其它程序的指令。

    另一个重要概念是所谓的系统时间,由系统时钟测量。系统时间表示计算机系统时间传递的概念。要记住系统时钟是可以由操作系统修改的,就是修改系统时间。

    Python的time模块提供了各种与时间相关的函数。由于大部分函数调用同名的与平台相关的C库函数,这些函数都是依赖于平台的。

    time.time与time.clock

    用于时间测量的两个函数是time.time和time.clock。time以秒返回自新纪元以来的时间。对于任何操作系统都可以运行time.gmtime(0)查找此系统的新纪元。对于Unix,新纪元是1970年1月1日。对于Windows,新纪元是1601年1月1日。time.time通常用于检测Windows上的程序。在Unix系统上,time.time的作用与Windows相同,但time.clock的意义不同。在Unix系统上,time.clock以秒为单位返回当前处理器时间,例如,执行当前线程所花费的CPU时间。而在Windows上,它是以秒为单位的返回自首次调用该函数以来所流逝的系统时间。

    time.time与time.clock另一个不同之处是,如果在两次调用之间将系统时钟调回,则time.time可能会返回一个较小的值,而time.clock则返回的值未增长。

    下面是在Unix系统上运行time.time和time.clock的例子:

    time.time()显示系统时间过去大概1秒,而time.clock()显示花费在当前进程上的CPU时间沁于1毫秒。同时可以看到time.clock()的精度高于time.time()

    下面是在Windows下,同样的程序返回不一样的结果:

    time.time()和time.clock()显示系统时间大致过去了1秒钏。与Unix不同,time.clock()不返回CPU时间,返回的是系统时间,且精度较高。

    time.time()和time.clock()对于不同的系统有不同行为,那么在测量程序准确性能时应该使用哪一个呢?

    这要视情况而定。如果程序运行的系统能够提供足够的资源给程序,例如,一个运行基于Python的web应用程序的web服务器,则使用time.clock()来测量程序会更有意义,因这个web应用程序可能是服务器上的主要程序。如果程序运行的系统上还同时运行着其它大量程序,则使用time.time()进行测量会更有意义。如果不是这样,就应该使用基于挂钟的计时器来测量程序的性能,因为这样通常能反应程序的环境。

    timeit模块

    处理不同平台上time.time()和time.clock()的不同行为通常容易出错,Python的timeit模块提供了一种处理时间的简单方式。除了从代码中直接调用,还可以从命令行调用它。

    例如:

    在基于Unix操作系统上

    #在Windows上

    在IDLE中

    timeit使用了什么计时?从timeit源代码可以看到,它使用了最好的计时器:

    timeit另一个重要机制是在执行期间,它禁用了垃圾回收,如下所示:

    如果启用垃圾回收,测量程序性能会更精确,例如,当程序为大量对象分配资源和释放资源时,就应该在其设置期间启用它:

    除了非常特殊的情况,一般应使用模块timeit。此外还有一点要记住,测量一个程序的性能要考虑全面一些,因为在执行一个程序的时候不可能为它无限制地分配资源,在众多循环中测量平均时间要好于在一次执行中测量一个时间。

  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/limengjie0104/p/8997466.html
Copyright © 2011-2022 走看看