APScheduler (重点)

我怕爱的太早我们不能终老 提交于 2019-11-28 22:49:55

定时校正

  • 需求: mysql和redis两个系统, mysql增加数据成功, redis未必添加成功, 这样两个系统的数据可能出现偏差, 所以需要定期对mysql和redis的数据进行同步
  • 解决方案: 每天执行一次定时任务, 让mysql数据和redis数据进行同步

  • crontab
    • 是linux系统一个内置命令, 依赖于linux系统, 无动态管理任务(取消/暂停/修改任务配置)
    • 使用场景: 适合于普通的静态任务
  • apscheduler
    • 独立的定时器程序, 可以方便的管理定时任务
    • 使用场景: 需要动态生成/管理任务, 如下单后30分钟可有效期
    • 安装 pip install apscheduler
    • 支持三种触发器
      • date 只执行一次
      • interval 周期执行 参数 时间间隔
      • cron 周期执行 参数 时间

调度器 Scheduler

负责管理定时任务

BlockingScheduler: 作为独立进程时使用

  from apscheduler.schedulers.blocking import BlockingScheduler

  scheduler = BlockingScheduler()
  scheduler.start()  # 此处程序会发生阻塞

BackgroundScheduler: 在框架程序(如Django、Flask)中使用

  from apscheduler.schedulers.background import BackgroundScheduler

  scheduler = BackgroundScheduler()
  scheduler.start()  # 此处程序不会发生阻塞

执行器 executors

在定时任务该执行时,以进程或线程方式执行任务

ThreadPoolExecutor

  from apscheduler.executors.pool import ThreadPoolExecutor
  ThreadPoolExecutor(max_workers)  
  ThreadPoolExecutor(20) # 最多20个线程同时执行

使用方法

  executors = {
      'default': ThreadPoolExecutor(20)
  }
  scheduler = BackgroundScheduler(executors=executors)

ProcessPoolExecutor

  from apscheduler.executors.pool import ProcessPoolExecutor
  ProcessPoolExecutor(max_workers)
  ProcessPoolExecutor(5) # 最多5个进程同时执行

使用方法

  executors = {
      'default': ProcessPoolExecutor(3)
  }
  scheduler = BackgroundScheduler(executors=executors)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!