Python每日定时任务高效实现:无需while循环且精度可达秒级
高效Python定时任务实现方案
方案1:直接使用系统级调度(最推荐,零后台资源占用)
该方案完全不需要自研调度逻辑、也不需要后台常驻进程,资源消耗是所有方案中最低的
- 操作逻辑:把你的业务逻辑改成单次执行的Python脚本,删除所有schedule相关代码和while循环
- Windows端配置:打开「任务计划程序」,新建任务,触发器设置为每天08:00触发,操作设置为启动
python.exe并传入你的脚本路径作为参数 - 多任务支持:如果需要不同时段执行不同任务,新增多个触发器或者多个任务项即可,原生支持秒级触发精度
- 优势:不需要维护常驻程序,系统级调度的稳定性远高于自研逻辑
方案2:使用APScheduler实现进程内优雅调度(适合需要在同一Python进程内管理多任务的场景)
不需要手动写while循环,库内部自动实现低功耗调度逻辑,CPU占用几乎为0,支持秒级精度
首先安装依赖库:pip install apscheduler
参考实现代码:
from apscheduler.schedulers.blocking import BlockingScheduler def job(t): print(f"I'm working... {t}") return if __name__ == '__main__': scheduler = BlockingScheduler() # 添加早8点定时任务 scheduler.add_job(job, 'cron', hour=8, minute=0, second=0, args=['It is 08:00']) # 可按需添加任意多其他定时任务 # scheduler.add_job(其他任务函数, 'cron', hour=12, minute=30, args=['其他任务参数']) scheduler.start()
- 说明:
BlockingScheduler启动后会自动进入等待状态,没有任务时处于休眠状态,不会空占CPU资源,触发精度最高可达毫秒级。启动后只需要用Windows任务计划程序设置开机自动运行该脚本即可。
原有schedule方案的低成本优化
如果不想改动现有基于schedule库的代码,只需要在while循环里添加一行time.sleep(1)即可避免CPU空转,修改后CPU占用会降到几乎可以忽略的水平,示例如下:
import schedule import time def job(t): print(f"I'm working... {t}") return schedule.every().day.at("08:00").do(job,'It is 08:00') while True: schedule.run_pending() time.sleep(1) # 新增该行即可避免循环持续占用CPU
内容的提问来源于stack exchange,提问作者Slartibartfast
相关产品推荐
相关产品推荐

