1. APScheduler简介
APscheduler全称Advanced Python Scheduler
作用为在指定的时间规则执行指定的任务,指定的任务就是一个Python函数。
2. APScheduler组件
核心组件有4个:Job、JobStore、Trigger、Executor
除了以下组件,还有Event 事件、 Listener 监听事件、 Scheduler 调度器
但需要自己操作的,只有
- Job:也就是自定义的函数
- JobStore:存储任务的方式,默认是存在内存,可以选择存储在数据库里,例如:redis
Job 作业
作用
Job作为APScheduler最小执行单位。
创建Job时指定执行的函数,函数中所需参数,Job执行时的一些设置信息。
构建说明
1 | id:指定作业的唯一ID |
Jobstore 作业存储
Jobstore在scheduler中初始化,另外也可通过scheduler的add_jobstore动态添加Jobstore。每个jobstore
都会绑定一个alias,scheduler在Add Job时,根据指定的jobstore在scheduler中找到相应的jobstore,并
将job添加到jobstore中。
Jobstore主要是通过pickle库的loads和dumps【实现核心是通过python的__getstate__和__setstate__重写
实现】,每次变更时将Job动态保存到存储中,使用时再动态的加载出来,作为存储的可以是redis,也可以
是数据库【通过sqlarchemy这个库集成多种数据库】,也可以是mongodb等
目前APScheduler支持的Jobstore:
1 | MemoryJobStore |
Trigger 触发器
Trigger绑定到Job,在scheduler调度筛选Job时,根据触发器的规则计算出Job的触发时间,然后与当前时间比较
确定此Job是否会被执行,总之就是根据trigger规则计算出下一个执行时间。
Trigger有多种种类,指定时间的DateTrigger,指定间隔时间的IntervalTrigger,像Linux的crontab
一样的CronTrigger
目前APScheduler支持的触发器:
1 | DateTrigger |
Executor 执行器
Executor在scheduler中初始化,另外也可通过scheduler的add_executor动态添加Executor。
每个executor都会绑定一个alias,这个作为唯一标识绑定到Job,在实际执行时会根据Job绑定的executor
找到实际的执行器对象,然后根据执行器对象执行Job
Executor的种类会根据不同的调度来选择,如果选择AsyncIO作为调度的库,那么选择AsyncIOExecutor,如果
选择tornado作为调度的库,选择TornadoExecutor,如果选择启动进程作为调度,
选择ThreadPoolExecutor或者ProcessPoolExecutor都可以
Executor的选择需要根据实际的scheduler来选择不同的执行器
目前APScheduler支持的Executor:
1 | AsyncIOExecutor |
3. Scheduler工作流程图
4.代码演示
1 | # -*- coding: utf-8 -*- |
5. 参考链接
Python定时库APScheduler原理及用法 - 知乎 (zhihu.com)