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 post请求的方法
May 26 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
python和shell获取文本内容的方法
Jun 05 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
python数据结构学习之实现线性表的顺序
Sep 28 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
Python虚拟环境venv用法详解
May 25 Python
python怎么判断模块安装完成
Jun 19 Python
Python使用xlrd实现读取合并单元格
Jul 09 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
python Zmail模块简介与使用示例
Dec 19 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 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 file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
PHP教程 基本语法
2009/10/23 PHP
php防止用户重复提交表单
2015/11/02 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
基于jquery的cookie的用法
2011/01/10 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
JAVA和C++的区别
2013/10/06 面试题
大一新生军训时的自我评价分享
2013/12/05 职场文书
上班上网检讨书
2014/01/29 职场文书
成绩单家长意见
2015/06/03 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python