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自动格式化json文件的方法
Mar 11 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
Python random模块用法解析及简单示例
Dec 18 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
matplotlib教程——强大的python作图工具库
Oct 15 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编程中10个最常见的错误
2014/08/08 PHP
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
python代码实现ID3决策树算法
2017/12/20 Python
Python工程师面试必备25条知识点
2018/01/17 Python
Flask之flask-session的具体使用
2018/07/26 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
使用Pycharm分段执行代码
2020/04/15 Python
如何基于python实现不邻接植花
2020/05/01 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
金融专业毕业生推荐信
2013/11/26 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
公立医院改革实施方案
2014/03/14 职场文书
党建目标管理责任书
2014/07/25 职场文书
2014年减负工作总结
2014/12/10 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书
python可视化之颜色映射详解
2021/09/15 Python