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函数嵌套实例
Sep 23 Python
python实现给字典添加条目的方法
Sep 25 Python
使用Python编写基于DHT协议的BT资源爬虫
Mar 19 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
python实现简单日期工具类
Apr 24 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
python dumps和loads区别详解
Feb 04 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
python获取对象信息的实例详解
Jul 07 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 正则学习实例
2008/07/30 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
JavaScript中import用法总结
2019/01/20 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
js编写简易的计算器
2020/07/29 Javascript
Python函数返回值实例分析
2015/06/08 Python
Python实现选择排序
2017/06/04 Python
python实现windows下文件备份脚本
2018/05/27 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
介绍一下#error预处理
2015/09/25 面试题
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
办理退休介绍信
2014/01/09 职场文书
个人实习生的自我评价
2014/02/16 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
HAM-2000摩机图
2021/04/22 无线电
Django如何创作一个简单的最小程序
2021/05/12 Python
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS