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处理html转义字符的方法详解
Jul 01 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Python爬虫利用cookie实现模拟登陆实例详解
Jan 12 Python
详解python中字典的循环遍历的两种方式
Feb 07 Python
Python logging管理不同级别log打印和存储实例
Jan 19 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
python3射线法判断点是否在多边形内
Jun 28 Python
django做form表单的数据验证过程详解
Jul 26 Python
Python 如何批量更新已安装的库
May 26 Python
python机器学习创建基于规则聊天机器人过程示例详解
Nov 02 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类的扩展和继承用法实例
2015/06/20 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
电子信息专业自荐书
2014/02/04 职场文书
环保建议书200字
2014/05/14 职场文书
班训口号大全
2014/06/18 职场文书
社区志愿者活动总结
2014/06/26 职场文书
中标通知书
2015/04/17 职场文书
企业愿景口号
2015/12/25 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python