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编写简单文件夹内图片浏览工具
Aug 17 Python
django初始化数据库的实例
May 27 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
python2与python3共存问题的解决方法
Sep 18 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
Python3 批量扫描端口的例子
Jul 25 Python
Python中断多重循环的思路总结
Oct 04 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
Python检测端口IP字符串是否合法
Jun 05 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 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之sphinx
2013/05/15 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
python中import与from方法总结(推荐)
2019/03/21 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
单位授权委托书范文
2014/08/02 职场文书
大学生学期个人总结
2015/02/12 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
2015年社区工作总结
2015/04/08 职场文书
我的1919观后感
2015/06/03 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
Python中else的三种使用场景
2021/06/16 Python
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers