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 相关文章推荐
在Python中使用列表生成式的教程
Apr 27 Python
举例详解Python中循环语句的嵌套使用
May 14 Python
Python subprocess模块详细解读
Jan 29 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
python实现控制COM口的示例
Jul 03 Python
Django  ORM 练习题及答案
Jul 19 Python
python实现3D地图可视化
Mar 25 Python
Django 允许局域网中的机器访问你的主机操作
May 13 Python
记一次django内存异常排查及解决方法
Aug 07 Python
详解基于python的图像Gabor变换及特征提取
Oct 26 Python
appium+python自动化配置(adk、jdk、node.js)
Nov 17 Python
Python selenium绕过webdriver监测执行javascript
Apr 12 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
php json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
python进阶教程之动态类型详解
2014/08/30 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
python数据类型强制转换实例详解
2020/06/22 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
物业管理毕业生个人的求职信
2013/11/30 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
导航工程专业自荐信
2014/09/02 职场文书
党课心得体会范文
2014/09/09 职场文书
初婚初育证明范本
2014/11/24 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书