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根据经纬度计算距离示例
Feb 16 Python
Python入门篇之字符串
Oct 17 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
Python自定义线程类简单示例
Mar 23 Python
python简单操作excle的方法
Sep 12 Python
python 对key为时间的dict排序方法
Oct 17 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
Python之关于类变量的两种赋值区别详解
Mar 12 Python
python如何操作mysql
Aug 17 Python
Python经常使用的一些内置函数
Apr 11 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初学者们头痛的十四个问题
2007/01/15 PHP
PHP文件操作实现代码分享
2011/09/01 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
php实现的简单日志写入函数
2015/03/31 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
srcElement表格样式
2006/09/03 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现简单字典树的方法
2016/04/29 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
TensorFlow损失函数专题详解
2018/04/26 Python
python使用插值法画出平滑曲线
2018/12/15 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
总经理岗位职责范本
2014/02/02 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
合伙经营协议书范本
2014/04/18 职场文书
学校教师读书活动总结
2014/07/08 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
家长会主持词开场白
2015/05/29 职场文书