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 27 Python
PYTHON正则表达式 re模块使用说明
May 19 Python
python在windows下实现备份程序实例
Jul 04 Python
python自带的http模块详解
Nov 06 Python
python实战之实现excel读取、统计、写入的示例讲解
May 02 Python
linux下python中文乱码解决方案详解
Aug 28 Python
Python上下文管理器全实例详解
Nov 12 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 Python
python2 对excel表格操作完整示例
Feb 23 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 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中最容易忘记的一些知识点总结
2013/04/28 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
Python中collections模块的基本使用教程
2018/12/07 Python
python小程序实现刷票功能详解
2019/07/17 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
Python logging模块handlers用法详解
2020/08/14 Python
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
证婚人经典证婚词
2014/01/09 职场文书
公司门卫管理制度
2014/02/01 职场文书
太太口服液广告词
2014/03/20 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
党性教育心得体会
2014/09/03 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
php 原生分页
2021/04/01 PHP
Python基础之pandas数据合并
2021/04/27 Python