• APScheduler -调度器 BlockingScheduler


    schedulers 调度器主要分三种,一种独立运行的,一种是后台运行的,最后一种是配合其它程序使用

    • BlockingScheduler: 当这个调度器是你应用中 唯一要运行 的东西时使用
    • BackgroundScheduler: 当 不运行其它框架 的时候使用,并使你的任务在 后台运行
    • AsyncIOScheduler: 当你的程序是 异步IO模型 的时候使用

    BlockingScheduler

    当你的应用中,仅仅只运行定时任务,其它代码都不执行的时候,可以用到BlockingScheduler 调度器。比如你写了一个简单的程序,设置一个定时任务去抓取页面的数据。那就可以用到BlockingScheduler.
    或者你单独去调试看定时任务有没执行

    from apscheduler.schedulers.blocking import BlockingScheduler  
    import time  
      
      
    # 仅运行定时任务  
    scheduler = BlockingScheduler()  
      
      
    # interval example, 间隔执行, 每10秒执行一次  
    def task1(x):  
        print(f'task 1 executed  {x}--------', time.time())  
      
      
    # 添加一个定时任务  
    scheduler.add_job(  
        task1, 'interval', seconds=10,  
        args=["xxxx"], id="task_1", replace_existing=True  
    )  
      
      
    # cron examples, 每5秒执行一次 相当于interval 间隔调度中seconds = 5  
    def task2(y):  
        print(f'task 2 executed  {y}--------', time.time())  
      
      
    # 添加一个定时任务  
    scheduler.add_job(  
        task2, 'cron', second='*/5',  
        args=["yyy"], id="task_2", replace_existing=True  
    )
    
    scheduler.start()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    运行结果

    task 2 executed  yyy-------- 1698211090.014796
    task 2 executed  yyy-------- 1698211095.0198605
    task 1 executed  xxxx-------- 1698211097.7044744
    task 2 executed  yyy-------- 1698211100.0056248
    task 2 executed  yyy-------- 1698211105.0121682
    task 1 executed  xxxx-------- 1698211107.6990259
    task 2 executed  yyy-------- 1698211110.0029516
    task 2 executed  yyy-------- 1698211115.011106
    task 1 executed  xxxx-------- 1698211117.699221
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    scheduler.start()

    scheduler.start() 调用会阻塞主线程

    # 添加一个定时任务  
    scheduler.add_job(  
        task2, 'cron', second='*/5',  
        args=["yyy"], id="task_2", replace_existing=True  
    )  
      
    scheduler.start()  
      
    while(True):  
        print('main ---------------')  
        time.sleep(1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如果后面还有其它代码,会一直没法执行。

    如果有其它代码需要执行,可以使用BackgroundScheduler,使你的任务在 后台运行

  • 相关阅读:
    编程参考 - std::exchange和std::swap的区别
    【Linux】常用工具(下)
    无公网IP如何将本地服务器端口应用发布到互联网外网访问?快解析内网穿透
    ArcGIS计算图斑四至坐标原来这么简单!可不要在走弯路哦
    三、西瓜书——神经网络
    LLM并行训练1-流水线并行
    Vue2.0+AntvX6——画布graph
    docker安装部署skywalking
    Web 攻击的日志分析:初学者指南
    minikube部署K8s命令
  • 原文地址:https://blog.csdn.net/qq_27371025/article/details/134087041