Python 实现一个计时器


Posted in Python onJuly 28, 2020

问题

你想记录程序执行多个任务所花费的时间

解决方案

time 模块包含很多函数来执行跟时间有关的函数。 尽管如此,通常我们会在此基础之上构造一个更高级的接口来模拟一个计时器。例如:

import time

class Timer:
  def __init__(self, func=time.perf_counter):
    self.elapsed = 0.0
    self._func = func
    self._start = None

  def start(self):
    if self._start is not None:
      raise RuntimeError('Already started')
    self._start = self._func()

  def stop(self):
    if self._start is None:
      raise RuntimeError('Not started')
    end = self._func()
    self.elapsed += end - self._start
    self._start = None

  def reset(self):
    self.elapsed = 0.0

  @property
  def running(self):
    return self._start is not None

  def __enter__(self):
    self.start()
    return self

  def __exit__(self, *args):
    self.stop()

这个类定义了一个可以被用户根据需要启动、停止和重置的计时器。 它会在 elapsed 属性中记录整个消耗时间。 下面是一个例子来演示怎样使用它:

def countdown(n):
  while n > 0:
    n -= 1

# Use 1: Explicit start/stop
t = Timer()
t.start()
countdown(1000000)
t.stop()
print(t.elapsed)

# Use 2: As a context manager
with t:
  countdown(1000000)

print(t.elapsed)

with Timer() as t2:
  countdown(1000000)
print(t2.elapsed)

讨论

本节提供了一个简单而实用的类来实现时间记录以及耗时计算。 同时也是对使用with语句以及上下文管理器协议的一个很好的演示。

在计时中要考虑一个底层的时间函数问题。一般来说, 使用 time.time() time.clock() 计算的时间精度因操作系统的不同会有所不同。 而使用 time.perf_counter() 函数可以确保使用系统上面最精确的计时器。

上述代码中由 Timer 类记录的时间是钟表时间,并包含了所有休眠时间。 如果你只想计算该进程所花费的CPU时间,应该使用 time.process_time() 来代替:

t = Timer(time.process_time)
with t:
  countdown(1000000)
print(t.elapsed)

time.perf_counter() time.process_time() 都会返回小数形式的秒数时间。 实际的时间值没有任何意义,为了得到有意义的结果,你得执行两次函数然后计算它们的差值。

以上就是Python 实现一个计时器的详细内容,更多关于Python 计时器的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python用户管理系统的实例讲解
Dec 23 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
使用Python如何测试InnoDB与MyISAM的读写性能
Sep 18 Python
python中import与from方法总结(推荐)
Mar 21 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
Python必须了解的35个关键词
Jul 16 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 20 Python
python爬虫要用到的库总结
Jul 28 #Python
Python常用类型转换实现代码实例
Jul 28 #Python
Python 如何创建一个线程池
Jul 28 #Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 #Python
python爬虫用mongodb的理由
Jul 28 #Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 #Python
Python3爬虫带上cookie的实例代码
Jul 28 #Python
You might like
php获取数组长度的方法(有实例)
2013/10/27 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
用vue设计一个日历表
2020/12/03 Vue.js
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
银行会计业务的个人自我评价
2013/11/02 职场文书
函授本科自我鉴定
2014/02/04 职场文书
报关报检委托书
2014/04/08 职场文书
保密工作责任书
2014/04/16 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android