定时任务(python)
这篇笔记梳理了在 Python 中实现定时任务的常见路径,适用于需要定期采集数据、固定时间发送通知、周期清理缓存或在常驻服务中触发后台逻辑的场景。内容先从 while True 加 time.sleep 的最小实现讲起,说明它无需依赖、控制直接,但会阻塞当前线程,且任务执行耗时会影响间隔,也不适合“每天几点几分”这类精确调度。随后对比 schedule 库的用法,展示 every().seconds、day.at、monday.at 等轻量语法,并解释 run_pending 加 sleep(1) 的轮询机制,强调 sleep 只是检查间隔,不等于改变任务周期。更完整的方案部分聚焦 APScheduler,说明 BlockingScheduler、BackgroundScheduler、AsyncIOScheduler 等调度器差异,以及 interval、cron、date 三类触发方式、内部任务计划表、轮询 tick、线程池执行和任务持久化能力。后半部分给出 asyncio 自定义调度示例,通过固定时间列表计算下一次运行时间,并结合 Redis 有序集合、去重 key 和 setex 过期时间实现订阅推送检查。整体结论是:脚本或一次性小任务可以用 schedule,少量异步任务且需要和 Redis 协调时可自定义 asyncio,但服务常驻、需要异步、cron、并发和更好维护性的场景更适合 APScheduler。
