• APScheduler初探


       安装

    pip install apscheduler

    2  APScheduler最基本的用法: “定时几秒后启动job”        每个job都会以thread的方式被调度。分为BlockingScheduler与BackgroundScheduler方式

    BackgroundScheduler例子(不阻塞)

    from apscheduler.schedulers.background import BackgroundScheduler
    import time
    
    def job():
        print('job 3s')
    
    
    if __name__=='__main__':
    
        sched = BackgroundScheduler(timezone='MST')
        sched.add_job(job, 'interval', id='3_second_job', seconds=3)
        sched.start()
    
        while(True):
            print('main 1s')
            time.sleep(1)

    通过这个输出,我们也可以发现,调用start函数后,job()并不会立即开始执行。而是等待3s后,才会被调度执行。

    3 add_job来添加作业(或装饰器模式添加作业)

    其中,date表示具体的一次性任务,interval表示循环任务,cron表示定时任务

    只执行一次  

    scheduler.add_job(job2, 'date', run_date=datetime.datetime(2019, 2, 25, 19, 5, 6), args=['text'], id='job2')

    每5秒执行一次:

    scheduler.add_job(job1, 'interval', seconds=5, id='job1')  # 每隔5秒执行一次

    每天凌晨1点30分50秒执行一次  (装饰器模式,参考https://www.cnblogs.com/Neeo/p/10435059.html#添加作业)

    @sc.scheduled_job('cron', day_of_week='*', hour=1, minute='30', second='50')

     例(用IDLE直接调试可能会出错;若改用非阻塞的BackgroundScheduler,需要用while保持脚本不退出):

    from apscheduler.schedulers.blocking import BlockingScheduler  # 后台运行
    sc = BlockingScheduler()
    
    @sc.scheduled_job('interval', seconds=2, id='job1')  # 每隔2秒执行一次
    def check():
        print("ok...")
    
    @sc.scheduled_job('interval', seconds=4, id='job2')  # 每隔4秒执行一次
    def check1():
        print("ko...")
        
    if __name__ == '__main__':
        try:
            sc.start()            
        except Exception as e:
            print('定时任务执行失败')
        finally:
           print("end")

      #每隔2分钟执行一次, */1:每隔1分钟执行一次

    scheduler.add_job(job1, 'cron', minute="*/2", id='job1') 

    # 每小时执行一次

    scheduler.add_job(job1, 'interval', hours=1, id='job1')

    # 每小时执行一次,上下浮动120秒区间内

    # scheduler.add_job(job1, 'interval', hours=1, id='job1', jitter=120)

    小结一下日常用法:

    1、首先,from apscheduler.schedulers.background import BackgroundScheduler  #后台运行任务计划

    2、生成对象  sc = BackgroundScheduler()

    3、在要定时执行的函数头上加上装饰函数。修改cron指定运行频次:

    @sc.scheduled_job('cron',day_of_week ='0-6',hour = 9,minute = 13,second = 00,id='dowork')  # 每天9点13分执行一次,id随便写

    参考:https://www.jianshu.com/p/b829a920bd33

    https://www.cnblogs.com/Neeo/p/10435059.html

    https://www.cnblogs.com/yueerwanwan0204/p/5480870.html

  • 相关阅读:
    题解:luoguP1070 道路游戏(DP)
    题解:luoguP2577【ZJOI2005】午餐(DP)
    题解:bzoj1801: [Ahoi2009]chess 中国象棋
    题解:bzoj1878: [SDOI2009]HH的项链
    SpringBoot静态资源文件 lion
    简要的Log4Net 应用配置
    Web Service 初级教程
    log4Net 动态改变写入文件
    Ornament 类型资源权限
    JQuery 引发两次$(document).ready事件
  • 原文地址:https://www.cnblogs.com/pu369/p/12672789.html
Copyright © 2020-2023  润新知