【python基础】定时任务框架APScheduler

发布时间 2023-04-18 15:56:46作者: Joseph312

1. 基础概念

  APScheduler是python中较为简洁直观的定时任务框架,提供了基于固定日期、时间间隔、crontab表达式三种任务类型,并且可以持久化任务(如:将定时任务保存到mysql中),方便我们去实现一个python定时任务系统。

  APScheduler由四个部件组成:
      trigger:触发器,每个job都有一个包含触发逻辑的触发器, 触发器类型有三种:
          <1> "date": 指定时间的一次性任务
          <2> "interval": 有时间间隔的循环任务
          <3> "cron": crontab表达式定时任务
      jobstores:存储器, 存储被调度的job,默认是保存在内存中,也可以通过SQLAlchemyJobStore持久化到数据库中
      executor:执行器, 提交指定的job到进程池或线程池来执行,运行完成通知调度器
          <1> ThreadPoolExecutor: 线程池执行器,默认选用线程形式执行,进程比较耗资源
          <2> ProcessPoolExecutor: 进程池执行器
      scheduler:调度器, 负责job整体的控制调度, 配置指定的job存储器与执行器,也可以增加、删除、修改job
         **两种常用调度器的区别:
          <1> BlockingScheduler: 当调用start函数后会阻塞当前线程, 后面代码不会被执行
          <2> BackgroundScheduler:当调用start函数后后台执行,不会阻塞后续代码的执行

2.示例代码

      

 

3.知识点整理    

    3.1. "interval"和"cron"类型的job均支持设置开始/结束时间参数
        *start_date:作为计算周期的开始时间点,其实也明确了下次job触发的时间点
        *end_date: job生命周期的终点
    3.2. "cron"类型的任务不仅支持按照一个或多个时间域来设置,而且支持使用标准的crontab表达式
        *CronTrigger.from_crontab('0/1 15 * * *')
          注意:这里的crontab表达式是5位,分别对应的时间域minute, hour, day of month, month, day of week
    3.3. 如果job需要传参,args传参必须是个有序的数据类型, 如列表,元组,字符串等,且元素数量和位置 = 入参数量和位置
    3.4. scheduler添加/删除job的方法:
        添加Job:scheduler.add_job()
              @scheduler.scheduled_add() #具体函数的修饰器
        删除Job: scheduler.remove('job_id')
    3.5. 最好要设定时区timezone = 'Asia/Shanghai'  (有点坑,因为个人办公电脑的UTC时区配置可能有偏差)

 

4. 更多细节 >>> Apscheduler官方文档: https://apscheduler.readthedocs.io/en/3.x/index.html