Python定时器实例代码

晚来风
晚来风
发布时间:2026-10-13 | 3人浏览过
原创

本文详细介绍Python中threading模块Timer类的使用方法,通过实例代码演示如何创建单次及循环定时器。重点解析构造函数参数、函数对象传递、间隔单位设置及cancel停止方法,并提供一个可调节精度的完整定时器脚本供参考。

在实际开发场景中,常需利用定时器来触发特定事件。Python提供了基于线程的定时器实现方式,其用法直观简便。具体示例如下:

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)Timer构造函数主要接收两个参数:第一个为延迟时间,第二个为要执行的函数名。第一个参数定义多久后执行后续函数;第二个参数必须是函数对象,即直接写函数名(如fun_timer),严禁写成函数调用语句(如fun_timer()),否则会导致报错。可通过type函数查看两者类型的区别。

print(type(fun_timer()))
print(type(fun_timer))

类型输出结果:

Hello Timer!
<class 'NoneType'>
<class 'function'>

(2)若需实现循环定时触发,必须在定时器执行的函数内部重新构造Timer实例。因为Timer默认仅执行一次,必须通过递归或循环方式手动调用start()来维持定时任务。

(3)定时器的时间间隔单位为秒,支持浮点数格式,例如5.5或0.02。在执行函数内部和外部设定的时间值可以不一致。如前例所示,第一次执行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 相关产品和应用

全部下载

专题列表