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中的floor()方法
May 15 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
基于python实现名片管理系统
Nov 30 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
pycharm全局搜索的具体步骤
Jul 28 Python
Python logging模块原理解析及应用
Aug 13 Python
python 基于opencv操作摄像头
Dec 24 Python
python用分数表示矩阵的方法实例
Jan 11 Python
理解python中装饰器的作用
Jul 21 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
讲解Python中的标识运算符
2015/05/14 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
python实现词法分析器
2019/01/31 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
Python实现最大子序和的方法示例
2019/07/05 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
大学生2014全国两会学习心得体会
2014/03/10 职场文书
大学生村官考核材料
2014/05/23 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
后勤管理员岗位职责
2014/08/27 职场文书