基于Python实现简单的定时器详解
概述
定时器是一种常用的编程工具,在某段时间间隔后执行特定的操作,常用于多线程、网络编程、定时任务等场景。Python标准库提供了多种方式实现定时器,如time.sleep()、threading.Timer()、sched.scheduler()等,本文将介绍基于threading.Timer()实现简单定时器的实现方法,并提供两个简单的示例说明。
实现方法
threading.Timer()
threading.Timer(interval, function, args=None, kwargs=None)
创建一个定时器,在interval时间后执行function函数。args和kwargs为function的参数,如果没有参数可以省略。Timer对象有start()和cancel()方法用于开启和取消定时器。
示例代码:
import threading
def hello():
print("Hello, World!")
# 创建一个定时器,在5秒后执行hello函数
timer = threading.Timer(5, hello)
timer.start()
执行结果:
Hello, World!
定时多次执行
如果需要多次执行定时器,可以在定时器结束后再创建一个新的定时器。示例代码:
import threading
def hello():
print("Hello, World!")
# 创建一个新的定时器,在5秒后再次执行hello函数
timer = threading.Timer(5, hello)
timer.start()
# 创建一个定时器,在5秒后执行hello函数
timer = threading.Timer(5, hello)
timer.start()
执行结果:
Hello, World!
Hello, World!
Hello, World!
...
小结
本文介绍了基于threading.Timer()实现简单定时器的实现方法,并提供了两个简单的示例说明。在实际编程中,我们可以根据实际需求选择合适的定时器实现方式。
示例说明
示例一
需求:每隔1秒输出一次当前时间,连续输出3次后结束。
实现方法:
import threading
import datetime
def print_time(count):
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(f'[{count}] {now}')
if count < 3: # 如果还未输出3次,则继续创建定时器
timer = threading.Timer(1, print_time, args=[count+1])
timer.start()
# 启动输出定时器
timer = threading.Timer(1, print_time, args=[1])
timer.start()
执行结果:
[1] 2022-01-03 17:09:48
[2] 2022-01-03 17:09:49
[3] 2022-01-03 17:09:50
示例二
需求:每隔30秒检查一次当前网络状态,发现断网则重连。
实现方法:
import threading
import subprocess
def check_network():
result = subprocess.run('ping www.baidu.com', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
if result.returncode == 0: # ping通了
print("网络正常")
else: # ping不通
print("网络断开,正在重连...")
# 重连操作
# ...
# 创建新的定时器,30秒后再次检查网络状态
timer = threading.Timer(30, check_network)
timer.start()
# 开始检查网络状态
check_network()
执行结果:
网络正常
网络正常
...
以上两个示例仅为简单的演示,实际应用中需要结合具体业务场景进行适当修改和调整。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Python实现简单的定时器详解 - Python技术站