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中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
详解Python中用于计算指数的exp()方法
May 14 Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
Feb 18 Python
Python socket处理client连接过程解析
Mar 18 Python
Python如何获取文件指定行的内容
May 27 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 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
php5 and xml示例
2006/11/22 PHP
php中rename函数用法分析
2014/11/15 PHP
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
python str字符串转uuid实例
2020/03/03 Python
python实现吃苹果小游戏
2020/03/21 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
自动化专业本科毕业生求职信
2013/10/20 职场文书
大一自我鉴定范文
2013/12/27 职场文书
运动会演讲稿300字
2014/08/25 职场文书
大学生个人总结范文
2015/02/15 职场文书
2015年父亲节寄语
2015/03/23 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
React中的Context应用场景分析
2021/06/11 Javascript
Java实现多文件上传功能
2021/06/30 Java/Android
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis