APScheduler是流行的定时任务框架
基本组成部分
Job:对用户提交定时任务的抽象
Trigger:对定时配置的抽象
Scheduler:作为用户接口,同时负责整体的调度
JobStore:负责Job的存储
启动Scheduler
-
创建、启动默认的任务执行器
-
创建、启动默认的JobStore
-
向JobStore添加挂起的任务
-
更新当前状态
-
唤醒Scheduler的轮询线程
任务提交
-
构建Job对象
-
计算Job的下次运行时间
-
将job添加到JobStore
-
发布EVENT_JOB_ADDED事件
-
唤醒Scheduler
任务执行
客户端使用的是BackgroundScheduler,以该Scheduler为例
APScheduler通过轮询线程来触发定时任务的执行,对应方法为BackgroundScheduler的_main_loop
若Scheduler状态为STATE_STOPPED,则结束循环,否则无限轮询。事件循环的主要过程如下:
-
从JobStore获取可执行的任务
-
查找可用的执行器
-
计算job的触发时间(在上次执行到现在期间可能有多个触发时间)
-
提交异步的执行任务(apscheduler.executors.base.run_job)到执行器
-
若触发时间与当前时间间隔在允许的范围内,则执行job
-
生成EVENT_JOB_SUBMITTED事件
-
计算job的下次执行时间
若下次执行时间为空则移除job
-
在所有可执行任务执行完后,计算下次任务的最早执行时间,进入睡眠。