什么是 sched?
sched 是 Python 标准库中的一个模块,用于实现事件调度(event scheduling)。
它提供了一个通用的事件调度器类 scheduler,允许你按时间安排函数调用。
虽然功能不如第三方库(如 APScheduler)强大,但在简单场景下非常轻便、无需额外依赖。
基本用法
创建调度器需要两个参数:
timefunc:返回当前时间的函数,通常用time.timedelayfunc:用于延迟执行的函数,通常用time.sleep
示例:每秒打印一次消息,共3次
import sched
import time
# 创建调度器
s = sched.scheduler(time.time, time.sleep)
def print_msg(msg):
print(f"[{time.strftime('%H:%M:%S')}] {msg}")
# 安排事件:延迟1秒后执行
for i in range(3):
s.enter(delay=i+1, priority=1, action=print_msg, argument=(f"第{i+1}次调用",))
# 启动调度
s.run()
关键方法说明
s.enter(delay, priority, action, argument=(), kwargs={}):安排一个事件s.enterabs(time, priority, action, argument=(), kwargs={}):在绝对时间点执行s.run(blocking=True):运行所有待处理事件s.cancel(event):取消某个已安排的事件
注意:priority 用于决定相同时间点多个事件的执行顺序(数字越小优先级越高)。
实际应用场景
- 定时发送通知或日志
- 周期性数据采集(如每5分钟抓取一次API)
- 教学演示或小型自动化脚本
⚠️ 注意:sched 是单线程阻塞式调度器,不适合高并发或复杂任务。
与 threading.Timer 的区别
sched 更适合管理多个定时任务并统一调度;
而 threading.Timer 适合单次延迟执行,且基于多线程。
若需非阻塞调度,可将 s.run() 放入子线程中运行。