Flask 与 APScheduler

Flask 与 APScheduler

  1. BackgroundScheduler
    调度器 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()  # 此处程序不会发生阻塞
      
  2. BackgroundScheduler的基本使用
    import time
    from apscheduler.schedulers.background import BackgroundScheduler
    from apscheduler.executors.pool import ThreadPoolExecutor
    
    
    # 1.定义执行器
    exeutors = {
        "default":ThreadPoolExecutor(max_workers=10)
    }
    
    # 2.创建调度器
    scheduler = BackgroundScheduler(exeutors=exeutors)
    
    # 3.定义定时任务
    def print_test():
        print("定时任务")
    
    # 4.添加任务
    # seconds :指定时间间隔
    scheduler.add_job(print_test, 'interval', seconds=3)
    
    # 5.启动调度器,不阻塞
    scheduler.start()
    
    # 6.手动添加代码,防止程序退出
    while 1:
        time.sleep(5*60)
    
  3. 传参给定时任务函数
    import time
    from apscheduler.schedulers.background import BackgroundScheduler
    from apscheduler.executors.pool import ThreadPoolExecutor
    
    # 1.定义执行器
    exeutors = {
        "default":ThreadPoolExecutor(max_workers=10)
    }
    
    # 2.创建调度器
    scheduler = BackgroundScheduler(exeutors=exeutors)
    
    # 3.定义定时任务
    def print_test(param1, param2):
        print("姓名:{},年龄:{}".format(param1, param2))
    
    # 4.添加任务
    # seconds :指定时间间隔
    scheduler.add_job(print_test, 'interval', seconds=3, args=["xlz", 18])
    
    # 5.启动调度器,不阻塞
    scheduler.start()
    
    # 6.手动添加代码,防止程序退出
    while 1:
        time.sleep(5*60)
    
  4. BackgroundScheduler融合到flask中
    from flask import Flask
    from apscheduler.schedulers.background import BackgroundScheduler
    from apscheduler.executors.pool import ProcessPoolExecutor
    
    # 1.定义执行器
    exeutors = {
        "default":ProcessPoolExecutor(max_workers=10)
    }
    
    app = Flask(__name__)
    
    # 2.创建调度器
    app.scheduler = BackgroundScheduler(exeutors=exeutors)
    
    # 3.定义定时任务
    def print_test(param):
        print("姓名:{}".format(param))
    
    # 动态启动定时任务
    @app.route('/start')
    def start():
        # 5.启动调度器,不阻塞
        app.scheduler.start()
        return '启动成功'
    
    # 动态添加定时任务
    @app.route("/add_job/")
    def add_job(param):
        app.scheduler.add_job(print_test, 'interval', seconds=3, args=[param], id=param)
        return "动态添加定时任务:{}".format(param)
    
    # 动态暂停定时任务
    @app.route("/pause_job/")
    def pause_job(param):
        app.scheduler.pause_job(param)
        return "动态暂停定时任务成功:{}".format(param)
    
    # 动态恢复定时任务
    @app.route("/resume_job/")
    def resume_job(param):
        app.scheduler.resume_job(param)
        return "动态恢复定时任务成功:{}".format(param)
    
    # 动态删除定时任务
    @app.route("/remove_job/")
    def remove_job(param):
        app.scheduler.remove_job(param)
        return "动态删除定时任务成功:{}".format(param)
    
    # 关闭所有定时任务
    @app.route("/shoutdown")
    def close_job():
        app.scheduler.shutdown()
        return "关闭所有定时任务成功"
    
    if __name__ == '__main__':
        app.run()
    

你可能感兴趣的:(Flask框架,Flask,与,APScheduler)