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二分法实现实例
Nov 21 Python
跟老齐学Python之用Python计算
Sep 12 Python
python常见数制转换实例分析
May 09 Python
在Django的session中使用User对象的方法
Jul 23 Python
python实现验证码识别功能
Jun 07 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
python变量的存储原理详解
Jul 10 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
python求前n个阶乘的和实例
Apr 02 Python
通俗讲解python 装饰器
Sep 07 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 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 MYSQL中插入当前时间
2008/04/06 PHP
php写的简易聊天室代码
2011/06/04 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
video.js添加自定义组件的方法
2020/12/09 Javascript
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
Python求解平方根的方法
2015/03/11 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
财务科科长岗位职责
2014/03/10 职场文书
团队拓展训练感想
2015/08/07 职场文书
小学数学教学随笔
2015/08/14 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技