Python定时器实例代码


Posted in Python onNovember 01, 2017

在实际应用中,我们经常需要使用定时器去触发一些事件。Python中通过线程实现定时器timer,其使用非常简单。看示例:

import threading
def fun_timer():
  print('Hello Timer!')
timer = threading.Timer(1, fun_timer)
timer.start()

输出结果:

Hello Timer!
Process finished with exit code 0

注意,只输出了一次,程序就结束了,显然不是我们想要的结果。看Timer类中的解释性描述:

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

一段时间后调用一个函数,但并没有说要循环调用该函数。因此,修改如下:

def fun_timer():
  print('Hello Timer!')
  global timer
  timer = threading.Timer(5.5, fun_timer)
  timer.start()

timer = threading.Timer(1, fun_timer)
timer.start()

输出结果:

Hello Timer!
Hello Timer!
Hello Timer!
Hello Timer!
............

定时器工作正常。

在使用Python定时器时需要注意如下4个方面:

(1)定时器构造函数主要有2个参数,第一个参数为时间,第二个参数为函数名,第一个参数表示多长时间后调用后面第二个参数指明的函数。第二个参数注意是函数对象,进行参数传递,用函数名(如fun_timer)表示该对象,不能写成函数执行语句fun_timer(),不然会报错。用type查看下,可以看出两者的区别。

print(type(fun_timer()))
print(type(fun_timer))

输出:

Hello Timer!
<class 'NoneType'>
<class 'function'>

(2)必须在定时器执行函数内部重复构造定时器,因为定时器构造后只执行1次,必须循环调用。

(3)定时器间隔单位是秒,可以是浮点数,如5.5,0.02等,在执行函数fun_timer内部和外部中给的值可以不同。如上例中第一次执行fun_timer是1秒后,后面的都是5.5秒后执行。

(4)可以使用cancel停止定时器的工作,如下例:

# -*- coding: utf-8 -*-
import threading
import time
def fun_timer():
  print('Hello Timer!')
  global timer
  timer = threading.Timer(5.5, fun_timer)
  timer.start()
timer = threading.Timer(1, fun_timer)
timer.start()
time.sleep(15) # 15秒后停止定时器
timer.cancel()

输出:

Hello Timer!
Hello Timer!
Hello Timer!
Process finished with exit code 0

下面是一个Python写的定时器,定时精度可调节,分享给大家。

# -* coding: utf-8 -*-
import sys
import os
import getopt
import threading
import time
def Usage():
	usage_str = '''说明:
	\t定时器
	\timer.py -h 显示本帮助信息,也可以使用--help选项
	\timer.py -d num 指定一个延时时间(以毫秒为单位)
	\t          也可以使用--duration=num选项
	'''
	print(usage_str)
	
def args_proc(argv):
	'''处理命令行参数'''
	try:
		opts, args = getopt.getopt(sys.argv[1:], 'hd:', ['help', 'duration='])
	except getopt.GetoptError as err:
		print('错误!请为脚本指定正确的命令行参数。\n')
		Usage()
		sys.exit(255)
	if len(opts) < 1:
		print('使用提示:缺少必须的参数。')
		Usage()
		sys.exit(255)
	usr_argvs = {}
	for op, value in opts:
		if op in ('-h', '--help'):
			Usage()
			sys.exit(1)
		elif op in ('-d', '--duration'):
			if int(value) <= 0:
				print('错误!指定的参数值%s无效。\n' % (value))
				Usage()
				sys.exit(2)
			else:
				usr_argvs['-d'] = int(value)
		else:
			print('unhandled option')
			sys.exit(3)
	return usr_argvs
def timer_proc(interval_in_millisecond):
	loop_interval = 10		# 定时精度,也是循环间隔时间(毫秒),也是输出信息刷新间隔时间,它不能大于指定的最大延时时间,否则可能导致无任何输出
	t = interval_in_millisecond / loop_interval
	while t >= 0:
		min = (t * loop_interval) / 1000 / 60
		sec = (t * loop_interval) / 1000 % 60
		millisecond = (t * loop_interval) % 1000
		print('\rThe remaining time:%02d:%02d:%03d...' % ( min, sec, millisecond ), end = '\t\t')
		time.sleep(loop_interval / 1000)
		t -= 1
	if millisecond != 0:
		millisecond = 0
		print('\rThe remaining time:%02d:%02d:%03d...' % ( min, sec, millisecond ), end = '\t\t')
	print()
# 应用程序入口
if __name__ == '__main__':
	usr_argvs = {}
	usr_argvs = args_proc(sys.argv)
	for argv in usr_argvs:
		if argv in ( '-d', '--duration'):
			timer_proc(usr_argvs[argv])
		else:
			continue

总结

以上就是本文关于Python定时器实例代码的全部内容,希望对大家有所帮助。欢迎参阅:Python生成数字图片代码分享、Python列表删除的三种方法代码分享、13个最常用的Python深度学习库介绍等,有什么问题可以随时留言,欢迎大家交流参考。

Python 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
Python的另外几种语言实现
Jan 29 Python
深入解析Python中的urllib2模块
Nov 13 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
dataframe设置两个条件取值的实例
Apr 12 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
Python表达式的优先级详解
Feb 18 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
机器学习python实战之决策树
Nov 01 #Python
详解Python开发中如何使用Hook技巧
Nov 01 #Python
python利用标准库如何获取本地IP示例详解
Nov 01 #Python
你眼中的Python大牛 应该都有这份书单
Oct 31 #Python
Python生成数字图片代码分享
Oct 31 #Python
python使用标准库根据进程名如何获取进程的pid详解
Oct 31 #Python
Python列表删除的三种方法代码分享
Oct 31 #Python
You might like
星际争霸中的热键
2020/03/04 星际争霸
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
php session_decode函数用法讲解
2019/05/26 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
javascript实现移动端上传图片功能
2020/08/18 Javascript
python3实现读取chrome浏览器cookie
2016/06/19 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
Python 解析xml文件的示例
2020/09/29 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
Java的类与C++的类有什么不同
2014/01/18 面试题
综合内勤岗位职责
2014/04/14 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
护士医德考评自我评价
2015/03/03 职场文书
小学运动会入场词
2015/07/18 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书