近期在学习并使用Python开发一些小工具,在这里记录方便回忆,也与各位开始走上这条路的朋友共勉,如有不正确希望指正,谢谢!

开始使用定时器时,度娘了下有没好的例子,本人比较懒,希望能直接使用。确实找到了一些,但是大多只是很直白的代码,自己打算整理一下。

我选用了threading模块中的定时器,使用线程的优势就是可以不干扰现有进程的正常执行。首先我们看下源码:

很简单的封装加上对线程的继承,函数也就是运行和取消,并有案例说明# The timer class was contributed by Itamar Shtull-Trauring

def Timer(*args, **kwargs):

"""Factory function to create a Timer object.

Timers call a function after a specified number of seconds:

t = Timer(30.0, f, args=[], kwargs={})

t.start()

t.cancel() # stop the timer's action if it's still waiting

"""

return _Timer(*args, **kwargs)

class _Timer(Thread):

"""Call a function after a specified number of seconds:

t = Timer(30.0, f, args=[], kwargs={})

t.start()

t.cancel() # stop the timer's action if it's still waiting

"""

def __init__(self, interval, function, args=[], kwargs={}):

Thread.__init__(self)

self.interval = interval

self.function = function

self.args = args

self.kwargs = kwargs

self.finished = Event()

def cancel(self):

"""Stop the timer if it hasn't finished yet"""

self.finished.set()

def run(self):

self.finished.wait(self.interval)

if not self.finished.is_set():

self.function(*self.args, **self.kwargs)

self.finished.set()

在run函数中 我们不免可以看出,当启动定时器后,一直在等待,然后进行判断set状态,是否执行用户函数,那么所谓的cancel也不是立即取消,而是简单的置状态。判断后也是运行了与cancel一样的代码。所以我们看出这里的定时器是一次性的定时器,而我们需要循环定时器。

现有使用这种定时器进行循环运行的思路是启用2个定时器,进行相互调用。但是是不是逻辑和使用太复杂呢?

那么我们使用更简单的,直接继承timer修改下run函数即可:class LoopTimer(_Timer):

"""Call a function after a specified number of seconds:

t = LoopTimer(30.0, f, args=[], kwargs={})

t.start()

t.cancel()     # stop the timer's action if it's still waiting

"""

def __init__(self, interval, function, args=[], kwargs={}):

_Timer.__init__(self,interval, function, args, kwargs)

def run(self):

'''self.finished.wait(self.interval)

if not self.finished.is_set():

self.function(*self.args, **self.kwargs)

self.finished.set()'''

while True:

self.finished.wait(self.interval)

if self.finished.is_set():

self.finished.set()

break

self.function(*self.args, **self.kwargs)

那么我们写了简单的例子测试下def testlooptimer():

print("I am loop timer.")

t = LoopTimer(2,testlooptimer)

t.start()

运行结果:I am loop timer.

I am loop timer.

I am loop timer.

I am loop timer.

python定时器 循环_Python系列之循环定时器相关推荐

  1. python reader循环_Python的for循环和while循环。

    1.while循环语句 while 语句同其他编程语言中 while 的使用方式大同小异,主要结构如下 while condition: expressions 其中 condition 为判断条件, ...

  2. python 跳出for循环_Python跳出多重循环的方法

    方法1:自定义异常# -*- coding:utf-8 -*- """ 功能:python跳出循环 """ # 方法1:自定义异常 clas ...

  3. python跳过本次循环_python跳过循环

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我如何跳过循环使用pdb.set_trace()? 例如, pdb.set_tr ...

  4. python用保留字while实现无限循环_Python中无限循环需要什么条件

    无限循环 如果条件判断语句永远为 true,循环将会无限的执行下去. 如下实例 #!/usr/bin/python # -*- coding: UTF-8 -*- var = 1 while var ...

  5. python永真循环_python永真循环_Python学习(一)

    一.Python中的变量定义 与JAVA类似 1.由字母数字下划线构成 2.首字母不能为数字 3.不用关键字 二.常量 全部由大写字母构成,不更改它,实际上可更改 三.注释 单行注释:# 多行注释:三 ...

  6. python跳出循环关键字_Python跳出for循环continue与break的区别

    在for和while循环语句中,当循环条件满足时,就会一直循环,如果想中途退出循环,该怎么办?如果想停止本次循环,而不终止整个循环,该怎么办?如果我想写个不执行任何操作的语句,该怎么写? Python ...

  7. python中while not循环_Python学习-while循环逻辑运算符

    一.while循环,continue.break语句在while循环中的使用 1.while循环语句: while 条件: 代码块 执行过程:判断条件是否为真,如果为真,执行代码块,继续下次循环,继续 ...

  8. python循环体结束标志_python如何结束循环

    python中的break语句和continue语句 break break是终止本次循环,比如你很多个while循环,你在其中一个while循环里写了一个break,满足条件,只会终止这个while ...

  9. python基础语法whike循环_python基础语法 - 循环

    while循环 1.基本语法 while 条件: -- if 条件: continue # 条件满足跳过当次循环 if 条件 break # 条件满足中止循环 else: # 只有当while循环结束 ...

最新文章

  1. android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
  2. 支付宝支付 第九集:产品数据和支付二维码对接
  3. [Spring Cloud Task]6 Spring Batch批处理应用设计原则
  4. SpringBoot快速集成Apollo配置中心
  5. BZOJXXXX: [IOI2000]邮局——四边形不等式优化初探
  6. 反走样和OpenGL多重采样
  7. OutLook2016修改注册表迁移.ost文件数据
  8. mysql 统计当天,本周,本月,上一月的数据
  9. 详述一条SQL引发的高CPU故障处理过程
  10. Android组件系列-----Activity保存状态
  11. C++ Copy Elision
  12. Python机器学习基础教程
  13. Linux系统的Shell编程
  14. 系统分析师——论文篇(三)
  15. 个人理财系统springboot项目开发(一)需求分析文档
  16. 大学excel题库含答案_2017excel试题库附答案.doc
  17. 这些年我用过的API文档工具,个个是精品。
  18. sdcard/DCIM/.thumbnails文件夹里的庞然大物 是这样来的
  19. 丢手帕问题(约瑟夫问题-数组实现)
  20. Widows(win10等等)使用过程中的 问题 与 小技巧 ----- 长期积累

热门文章

  1. 深圳市及各区高新补贴
  2. R语言mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model)GAM(对非线性变量进行样条处理、计算RMSE、R方、调整R方、可视化模型预测值与真实值的曲线)
  3. HRM人力资源系统-Day07-RabbitMQ java操作
  4. 山东大学软件学院操作系统实验1(关于环境)
  5. 软件方法笔记6-系统用例规约
  6. 【Python第3篇】如何在Python中对代码进行注释
  7. 检信智能语音情感识别-基于SVM的语音情感识别系统设计
  8. win10语音识别python_微软不愿意提及的软肋:Win10的语音识别
  9. edge-connect 论文代码复现
  10. LAN/WAN他们的区别是什么?