zoukankan      html  css  js  c++  java
  • time模块的time方法、perf_counter方法和process_time方法的区别

    1. time.time()方法

    返回自纪元以来的秒数作为浮点数,但是时期的具体日期和闰秒的处理取决于使用的平台。比如:在Windows和大多数Unix系统上,纪元是1970年1月1日00:00:00(UTC),并且闰秒不计入自纪元以来的秒数,这也通常被称为Unix时间。我们要可以通过gmtime(0)查看自己平台上的纪元。
    注意,即使时间总是作为浮点数返回,但并非所有系统都提供的精度高于1秒,而且更改系统的时间会影响time()的值。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。
    time()返回的数字可以转换为更常见的时间格式(即年,月,日,小时等),方法是将其传递给gmtime()函数或在本地时间传递给本地时间( )功能。在这两种情况下都返回struct_time对象,可以从该对象作为属性访问日历日期的组件。
    所以我们通常用time()来做时间的格式输出,也会用在一些测试代码时间上面。在我们测试代码的时候需要调用两次,做差值,注意它会把sleep()的时间也算进去。(具体场景有知道的小伙伴欢迎留言分享)

    2. time.perf_counter()方法

    返回性能计数器的值(以小数秒为单位)作为浮点数,即具有最高可用分辨率的时钟,以测量短持续时间。 它确实包括睡眠期间经过的时间,并且是系统范围的。
    通常perf_counter()用在测试代码时间上,具有最高的可用分辨率。不过因为返回值的参考点未定义,因此我们测试代码的时候需要调用两次,做差值。
    perf_counter()会包含sleep()休眠时间,适用测量短持续时间

    3. time.process_time()方法

    返回当前进程的系统和用户CPU时间总和的值(以小数秒为单位)作为浮点数。
    通常time.process_time()也用在测试代码时间上,根据定义,它在整个过程中。返回值的参考点未定义,因此我们测试代码的时候需要调用两次,做差值。
    注意process_time()不包括sleep()休眠时间期间经过的时间。

    4. 三者比较

    除了time模块,Python还提供了timeit模块。timeit模块提供了一种简单的方法来计算一小段Python代码,比如一些循环或者正则匹配。 timeit既有命令行界面,也有可调用界面。 避免了许多用于测量执行时间的常见陷阱。可以用于基准测试/分析目的的代码块。
    具体的用法:更多用法可以查看timeit官方文档

    import timeit
    t = timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
    print(t)


    time()精度上相对没有那么高,而且受系统的影响,适合表示日期时间或者大程序程序的计时。
    perf_counter()适合小一点的程序测试,会计算sleep()时间。
    process_counter()适合小一点的程序测试,不会计算sleep()时间。
    此外Python3.7开始还提供了以上三个方法精确到纳秒的计时。分别是:
    time.perf_counter_ns()
    time.process_time_ns()
    time.time_ns()
    注意这三个精确到纳秒的方法返回的是整数类型。
    以前还有一个clock()方法,尽管现在这个方法还能用,但是这个方法在Python3.8中会被废除掉了,所以这里就不过多介绍。
    5 测试代码

    import time
    
    print('我是time()方法:{}'.format(time.time()))
    print('我是perf_counter()方法:{}'.format(time.perf_counter()))
    print('我是process_time()方法:{}'.format(time.process_time()))
    t0 = time.time()
    c0 = time.perf_counter()
    p0 = time.process_time()
    r = 0
    for i in range(10000000):
    r += i
    time.sleep(2)
    print(r)
    t1 = time.time()
    c1 = time.perf_counter()
    p1 = time.process_time()
    spend1 = t1 - t0
    spend2 = c1 - c0
    spend3 = p1 - p0
    print("time()方法用时:{}s".format(spend1))
    print("perf_counter()用时:{}s".format(spend2))
    print("process_time()用时:{}s".format(spend3))
    print("测试完毕")

    ---------------------
    作者:Jock2018
    来源:CSDN
    原文:https://blog.csdn.net/qq_27283619/article/details/89280974
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    对网络状态监控的两种方法,提示用户联网
    android基于PayPal实现移动在线付款
    android实现拍照,并将图片保存到SD下
    异步下载图片并对对图片进行压缩处理
    微软经典案例系列课程(视频课程讲师:杨丹)
    微软Silverlight开发团队零距离接触系列课程(视频课程讲师:徐鹏阳)
    SaaS软件即服务系列课程(视频课程讲师:吴淏)
    Mobile应用实例分析系列(视频课程讲师:刘彦博)
    模式与实践系列课程(视频课程讲师:张大磊)
    SQL Server 2005 BI综合案例系列课程(视频课程讲师:李苗/金立钢)
  • 原文地址:https://www.cnblogs.com/s-seven/p/11101535.html
Copyright © 2011-2022 走看看