在日常的 Python 定时器 开发中,我们经常需要让程序在特定时间执行某些任务。比如每天凌晨清理日志、每小时抓取一次数据、或是在几秒后提醒用户等。Python 标准库中的 sched 模块正是为这类需求而生——它提供了一个简单但功能完整的 事件调度 机制。

sched 是 Python 内置的标准库模块,无需额外安装。它允许你创建一个事件调度器(scheduler),然后向其中添加“事件”——这些事件会在指定的延迟或绝对时间点被触发执行。
它的核心优势在于:轻量、纯 Python 实现、线程安全(但默认单线程运行),非常适合小型项目或学习用途。
使用 sched 调度事件只需三步:
sched 和 time 模块import schedimport time# 创建调度器scheduler = sched.scheduler(time.time, time.sleep)# 定义要执行的函数def say_hello(): print("Hello! 当前时间:", time.strftime('%Y-%m-%d %H:%M:%S'))# 添加事件:5秒后执行 say_helloscheduler.enter(5, 1, say_hello, ())print("调度器已启动,等待5秒...")# 启动调度器scheduler.run()运行这段代码,你会看到程序先打印“调度器已启动...”,然后等待5秒,再输出问候语和当前时间。
在 scheduler.enter(delay, priority, action, argument=(), kwargs={}) 中:
delay:延迟多少秒后执行(相对时间)priority:优先级,数字越小优先级越高(用于同一时刻多个事件)action:要调用的函数argument:传递给函数的位置参数(元组)kwargs:传递给函数的关键字参数(字典)import schedimport timescheduler = sched.scheduler(time.time, time.sleep)def task(name): print(f"执行任务: {name}, 时间: {time.strftime('%H:%M:%S')}")# 两个都在3秒后执行,但优先级不同scheduler.enter(3, 2, task, ('低优先级任务',))scheduler.enter(3, 1, task, ('高优先级任务',))print("启动调度器...")scheduler.run()输出结果会先显示“高优先级任务”,再显示“低优先级任务”,尽管它们计划在同一时刻执行。
很多场景需要重复执行任务(如每10秒检查一次)。sched 本身不直接支持循环,但我们可以在任务函数内部重新调度自己。
import schedimport timescheduler = sched.scheduler(time.time, time.sleep)count = 0def repeat_task(): global count count += 1 print(f"第 {count} 次执行,时间: {time.strftime('%H:%M:%S')}") # 如果还没达到5次,继续调度自己 if count < 5: scheduler.enter(2, 1, repeat_task, ())# 首次调度scheduler.enter(0, 1, repeat_task, ())scheduler.run()scheduler.run() 会阻塞主线程,直到所有事件完成。如果你需要后台运行,可考虑在子线程中启动调度器。sched 的精度通常在毫秒级,不适合微秒级定时。对于更复杂的 定时任务 需求(如 cron 表达式、分布式调度),建议使用第三方库如 APScheduler 或 celery。但对于学习和轻量级应用,Python sched库 是一个绝佳起点。
通过本文,你已经掌握了如何使用 Python 的 sched 模块进行基本的事件调度。无论是简单的延时执行,还是带优先级的多任务调度,甚至是循环任务,sched 都能胜任。记住它的核心是:创建调度器 → 添加事件 → 启动运行。
现在,你可以尝试用它来构建自己的提醒工具、自动化脚本或教学演示程序了!
本文由主机测评网于2025-12-14发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025127816.html