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 socket函数中,send与sendall的区别与使用方法
May 09 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
对Python中range()函数和list的比较
Apr 19 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
详解torch.Tensor的4种乘法
Sep 03 Python
python GUI计算器的实现
Oct 09 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 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函数utf8转gb2312编码
2006/12/21 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
如何通过Python实现标签云算法
2019/07/02 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
css3 transform属性详解
2014/09/30 HTML / CSS
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
工商治理实习生的自我评价
2014/01/15 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
三八妇女节活动总结
2014/05/04 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL