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实现ftp客户端示例分享
Feb 17 Python
Python实现全角半角转换的方法
Aug 18 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Tensorflow之Saver的用法详解
Apr 23 Python
将python图片转为二进制文本的实例
Jan 24 Python
Python使用ctypes调用C/C++的方法
Jan 29 Python
Python元组常见操作示例
Feb 19 Python
8段用于数据清洗Python代码(小结)
Oct 31 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
jupyter notebook的安装与使用详解
May 18 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
python中scrapy处理项目数据的实例分析
Nov 22 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/03/11 PHP
php 常用字符串函数总结
2008/03/15 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
2015/06/10 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
js option删除代码集合
2008/11/12 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python模块之StringIO使用示例
2015/04/08 Python
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
python实现将内容分行输出
2015/11/05 Python
实用自动化运维Python脚本分享
2018/06/04 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
python定位xpath 节点位置的方法
2019/08/27 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
《云雀的心愿》教学反思
2014/02/25 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书