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 31 Python
Python实现的递归神经网络简单示例
Aug 11 Python
用tensorflow实现弹性网络回归算法
Jan 09 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
Python3中bytes类型转换为str类型
Sep 27 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
python爬虫超时的处理的实例
Dec 19 Python
selenium+python自动化测试之页面元素定位
Jan 23 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
Python猴子补丁知识点总结
Jan 05 Python
Django如何创作一个简单的最小程序
May 12 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
实用函数5
2007/11/08 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
php 操作excel文件的方法小结
2009/12/31 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
js实现新浪微博首页效果
2015/10/16 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
python pygame模块编写飞机大战
2018/11/20 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
个人投资计划书
2014/05/01 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
未中标通知书
2015/04/17 职场文书
单方投资意向书
2015/05/11 职场文书
个人收入证明格式
2015/06/24 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android