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中os和shutil模块实用方法集锦
May 13 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
Apr 14 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 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&mysql(六)
2006/10/09 PHP
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
Python os模块介绍
2014/11/30 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
python内存管理机制原理详解
2019/08/12 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
考试作弊检讨书怎么写?
2014/12/21 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书