✨前言:
在Python编程中,定时器是一种非常有用的工具,用于执行特定任务或函数,例如定时任务、轮询操作、定时检查等。Python提供了多种方式来创建和使用定时器,本文将介绍一些高级的定时器使用方式,包括使用threading模块、使用schedule库以及在异步编程中使用定时器。
👉1 使用time.sleep()结合循环
这是最基础的计时方法,通过让程序暂停一定时间来实现简单的定时任务。
#!/usr/bin/env python
# coding=utf-8
"""
# @Time : 2024/4/26
# @Author : Summer
# @File : test
# @describe:
"""
import time
def task():
print("任务执行中...")
interval = 5 # 间隔5秒
while True:
task()
time.sleep(interval)
👉2.使用threading.Timer
threading.Timer是Python标准库threading中的一个类,用于在指定时间后启动一个任务。它主要用于简单的延迟任务执行,适合于不需要复杂调度逻辑的场景。其使用相对简单,但在处理复杂的调度任务时可能会显得力不从心。
常用场景
延迟执行任务:在需要任务延迟一段时间执行时,如启动延迟、简单重试机制等。
单次定时任务:适合于只需要执行一次的定时任务。
常用方法
创建和启动定时器:
import threading
def my_task():
print("My Task Executing")
timer = threading.Timer(10, my_task) # 10秒后执行my_task
timer.start()
取消定时器: 如果定时器尚未执行,可以使用cancel()方法取消。
timer.cancel()
👉3 使用sched模块
sched模块是Python自带的一个事件调度模块,它提供了一个通用的方法来定时运行任务。
3.1 enter
enter(delay, priority, action, argument=(), kwargs={})
这个方法用于调度一个事件。事件将会在指定的延迟时间delay后被执行。priority参数用于同一时间到达的两个事件进行排序:具有较小priority值的事件会被先执行。action参数则是当事件被执行时会调用的函数,argument是传递给action的参数组成的元组,kwargs是传递给action的关键字参数组成的字典。
调用enter方法会返回一个事件对象,这个对象可以用于后续取消该事件。
3.2 cancel(evt)
cancel(event)
此方法用于取消一个已经被安排的事件。要取消一个事件,你需要传递给cancel方法之前调用enter方法时返回的事件对象。一旦取消,该事件就不会执行。
如果尝试取消一个不存在或已经执行的事件,则会抛出一个ValueError异常。