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中变量的拷贝和作用域问题
May 05 Python
Python实现给文件添加内容及得到文件信息的方法
May 28 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
python代数式括号有效性检验示例代码
Oct 04 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 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
上海无线电三厂简史修改版
2021/03/01 无线电
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
javascript getElementsByClassName实现代码
2010/10/11 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
详解Python中的元组与逻辑运算符
2015/10/13 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
如何写毕业求职自荐信
2013/11/06 职场文书
智能电子应届生求职信
2013/11/10 职场文书
机电一体化专业应届生求职信
2013/11/27 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
银行贷款承诺书
2014/03/29 职场文书
产假请假条
2014/04/10 职场文书
三年级评语大全
2014/04/23 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python