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使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
对python的输出和输出格式详解
Dec 08 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
Python实现12306火车票抢票系统
Jul 04 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
iPython pylab模式启动方式
Apr 24 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
Python中相见恨晚的技巧
Apr 13 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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.NET的入门教程
2006/10/09 PHP
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
JS二叉树的简单实现方法示例
2017/04/05 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
分享一个简单的python读写文件脚本
2017/11/25 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
《故都的秋》教学反思
2014/04/15 职场文书
会计毕业生自荐书
2014/06/12 职场文书
新娘婚礼致辞
2015/07/27 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书