python定时器 循环_Python系列之循环定时器
近期在学习并使用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系列之循环定时器相关推荐
- python reader循环_Python的for循环和while循环。
1.while循环语句 while 语句同其他编程语言中 while 的使用方式大同小异,主要结构如下 while condition: expressions 其中 condition 为判断条件, ...
- python 跳出for循环_Python跳出多重循环的方法
方法1:自定义异常# -*- coding:utf-8 -*- """ 功能:python跳出循环 """ # 方法1:自定义异常 clas ...
- python跳过本次循环_python跳过循环
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我如何跳过循环使用pdb.set_trace()? 例如, pdb.set_tr ...
- python用保留字while实现无限循环_Python中无限循环需要什么条件
无限循环 如果条件判断语句永远为 true,循环将会无限的执行下去. 如下实例 #!/usr/bin/python # -*- coding: UTF-8 -*- var = 1 while var ...
- python永真循环_python永真循环_Python学习(一)
一.Python中的变量定义 与JAVA类似 1.由字母数字下划线构成 2.首字母不能为数字 3.不用关键字 二.常量 全部由大写字母构成,不更改它,实际上可更改 三.注释 单行注释:# 多行注释:三 ...
- python跳出循环关键字_Python跳出for循环continue与break的区别
在for和while循环语句中,当循环条件满足时,就会一直循环,如果想中途退出循环,该怎么办?如果想停止本次循环,而不终止整个循环,该怎么办?如果我想写个不执行任何操作的语句,该怎么写? Python ...
- python中while not循环_Python学习-while循环逻辑运算符
一.while循环,continue.break语句在while循环中的使用 1.while循环语句: while 条件: 代码块 执行过程:判断条件是否为真,如果为真,执行代码块,继续下次循环,继续 ...
- python循环体结束标志_python如何结束循环
python中的break语句和continue语句 break break是终止本次循环,比如你很多个while循环,你在其中一个while循环里写了一个break,满足条件,只会终止这个while ...
- python基础语法whike循环_python基础语法 - 循环
while循环 1.基本语法 while 条件: -- if 条件: continue # 条件满足跳过当次循环 if 条件 break # 条件满足中止循环 else: # 只有当while循环结束 ...
最新文章
- android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
- 支付宝支付 第九集:产品数据和支付二维码对接
- [Spring Cloud Task]6 Spring Batch批处理应用设计原则
- SpringBoot快速集成Apollo配置中心
- BZOJXXXX: [IOI2000]邮局——四边形不等式优化初探
- 反走样和OpenGL多重采样
- OutLook2016修改注册表迁移.ost文件数据
- mysql 统计当天,本周,本月,上一月的数据
- 详述一条SQL引发的高CPU故障处理过程
- Android组件系列-----Activity保存状态
- C++ Copy Elision
- Python机器学习基础教程
- Linux系统的Shell编程
- 系统分析师——论文篇(三)
- 个人理财系统springboot项目开发(一)需求分析文档
- 大学excel题库含答案_2017excel试题库附答案.doc
- 这些年我用过的API文档工具,个个是精品。
- sdcard/DCIM/.thumbnails文件夹里的庞然大物 是这样来的
- 丢手帕问题(约瑟夫问题-数组实现)
- Widows(win10等等)使用过程中的 问题 与 小技巧 ----- 长期积累
热门文章
- 深圳市及各区高新补贴
- R语言mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model)GAM(对非线性变量进行样条处理、计算RMSE、R方、调整R方、可视化模型预测值与真实值的曲线)
- HRM人力资源系统-Day07-RabbitMQ java操作
- 山东大学软件学院操作系统实验1(关于环境)
- 软件方法笔记6-系统用例规约
- 【Python第3篇】如何在Python中对代码进行注释
- 检信智能语音情感识别-基于SVM的语音情感识别系统设计
- win10语音识别python_微软不愿意提及的软肋:Win10的语音识别
- edge-connect 论文代码复现
- LAN/WAN他们的区别是什么?