APScheduler源码分析

APScheduler是流行的定时任务框架

基本组成部分

Job:对用户提交定时任务的抽象

Trigger:对定时配置的抽象

Scheduler:作为用户接口,同时负责整体的调度

JobStore:负责Job的存储

启动Scheduler

  1. 创建、启动默认的任务执行器

  2. 创建、启动默认的JobStore

  3. 向JobStore添加挂起的任务

  4. 更新当前状态

  5. 唤醒Scheduler的轮询线程

任务提交

  1. 构建Job对象

  2. 计算Job的下次运行时间

  3. 将job添加到JobStore

  4. 发布EVENT_JOB_ADDED事件

  5. 唤醒Scheduler

任务执行

客户端使用的是BackgroundScheduler,以该Scheduler为例

APScheduler通过轮询线程来触发定时任务的执行,对应方法为BackgroundScheduler_main_loop

若Scheduler状态为STATE_STOPPED,则结束循环,否则无限轮询。事件循环的主要过程如下:

  1. JobStore获取可执行的任务

  2. 查找可用的执行器

  3. 计算job的触发时间(在上次执行到现在期间可能有多个触发时间)

  4. 提交异步的执行任务(apscheduler.executors.base.run_job)到执行器

  5. 若触发时间与当前时间间隔在允许的范围内,则执行job

  6. 生成EVENT_JOB_SUBMITTED事件

  7. 计算job的下次执行时间

    若下次执行时间为空则移除job

  8. 在所有可执行任务执行完后,计算下次任务的最早执行时间,进入睡眠。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值