1. 安装
pip install apscheduler
2. 四大组件
- 触发器triggers: 用于设定触发任务的条件
- 任务存贮器job store: 用于存放任务, 把任务存放在内存或数据库中
- 执行器executors: 用于执行任务, 可以设定执行模式为单线程或线程池
- 调度器schedules: 把上方三个组件作为参数, 通过创建调度器实例来运行
3. 调度器
- BlockingScheduler 阻塞式调度器:适用于只跑调度器的程序。
- BackgroundScheduler 后台调度器:适用于非阻塞的情况,调度器会在后台独立运行。
- AsyncIOScheduler AsyncIO调度器,适用于应用使用AsnycIO的情况。
- GeventScheduler Gevent调度器,适用于应用通过Gevent的情况。
- TornadoScheduler Tornado调度器,适用于构建Tornado应用。
- TwistedScheduler Twisted调度器,适用于构建Twisted应用。
- QtScheduler Qt调度器,适用于构建Qt应用。
4. 触发器
- date 日期:触发任务运行的具体日期
- interval 间隔:触发任务运行的时间间隔
- cron 周期:触发任务运行的周期
- calendarinterval:当您想要在一天中的特定时间以日历为基础的间隔运行任务时使用 , 一个任务也可以设定多种触发器,比如,可以设定同时满足所有触发器条件而触发,或者满足一项即触发。
5. 实例
5.1 触发器date(特定时间点执行一次)
代码解读:程序一直处于阻塞状态,在2020-01-19 19:08:00
执行一次后继续阻塞
from apscheduler.schedulers.blocking import BlockingScheduler
def spider():
print('spider name')
schedule = BlockingScheduler()
schedule.add_job(spider, 'date', run_date='2020-01-19 19:08:00')
schedule.start()
5.2 触发器interval :周期任务
参数 | 说明 |
---|---|
weeks(int) | 间隔几周 |
days(int) | 间隔几天 |
hours(int) | 间隔几小时 |
minutes(int) | 间隔几分钟 |
seconds(int) | 间隔多少秒 |
start_date(datetime or str) | 开始日期 |
end_date(datetime or str) | 结束日期 |
timezone(datetime.tzinfo or str) | 时区 |
代码解读:程序一直处于阻塞状态,在start_date 和 end_date 这个时间段内每隔1s执行一次;其中start_date 和end_date 可有可无
from apscheduler.schedulers.blocking import BlockingScheduler
def spider():
print('spider name')
schedule = BlockingScheduler()
schedule.add_job(spider, 'interval', seconds=1, start_date="2020-01-19 19:15:00", end_date="2020-01-19 19:15:20")
schedule.start()