zoukankan      html  css  js  c++  java
  • APschedule定时任务

    APScheduler是Python的一个定时任务框架,可以很方便的满足用户定时执行或者周期执行任务的需求,

    它提供了基于日期date、固定时间间隔interval 、以及类似于Linux上的定时任务crontab类型的定时任务。

    并且该框架不仅可以添加、删除定时任务,还可以将任务存储到数据库中,实现任务的持久化。

    简单介绍

     APScheduler有四种组件及相关说明:

          1) triggers(触发器):触发器包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行,除了他们自己初始化配置外,触发器完全是无状态的。

          2)job stores(作业存储):用来存储被调度的作业,默认的作业存储器是简单地把作业任务保存在内存中,其它作业存储器可以将任务作业保存到各种数据库中,支持MongoDB、Redis、SQLAlchemy存储方式。当对作业任务进行持久化存储的时候,作业的数据将被序列化,重新读取作业时在反序列化。

          3) executors(执行器):执行器用来执行定时任务,只是将需要执行的任务放在新的线程或者线程池中运行。当作业任务完成时,执行器将会通知调度器。对于执行器,默认情况下选择ThreadPoolExecutor就可以了,但是如果涉及到一下特殊任务如比较消耗CPU的任务则可以选择ProcessPoolExecutor,当然根据根据实际需求可以同时使用两种执行器。

          4) schedulers(调度器):调度器是将其它部分联系在一起,一般在应用程序中只有一个调度器,应用开发者不会直接操作触发器、任务存储以及执行器,相反调度器提供了处理的接口。通过调度器完成任务的存储以及执行器的配置操作,如可以添加。修改、移除任务作业。  

        APScheduler提供了多种调度器,可以根据具体需求来选择合适的调度器,常用的调度器有:

          BlockingScheduler:适合于只在进程中运行单个任务的情况,通常在调度器是你唯一要运行的东西时使用。

          BackgroundScheduler: 适合于要求任何在程序后台运行的情况,当希望调度器在应用后台执行时使用。

          AsyncIOScheduler:适合于使用asyncio框架的情况

          GeventScheduler: 适合于使用gevent框架的情况

          TornadoScheduler: 适合于使用Tornado框架的应用

          TwistedScheduler: 适合使用Twisted框架的应用

          QtScheduler: 适合使用QT的情况

    基本使用

    1.安装

    pip install apscheduler 

    2. 使用

    定时执行函数test_job,每隔5秒钟执行一次

    from apscheduler.schedulers.blocking import BlockingScheduler
    import time
    def test_job():
    
        print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
    
    test_job()
    
    scheduler = BlockingScheduler()
    
    scheduler.add_job(test_job,'interval',seconds=5,id='test_job')
    
    scheduler.start()

     例2:

    每周星期一到星期五,下午13:00-19:00每分每4秒执行一次

    import datetime
    import time
    from apscheduler.schedulers.blocking import BlockingScheduler
    def job_function():
    
       print("Hello World" + " " + str(datetime.datetime.now()))
    
    
    if __name__ == '__main__':
        print('start to do it')
        sched = BlockingScheduler()
        sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour='13-19', minute="*", second="*/4") # 每4秒执行一次
        sched.start()
  • 相关阅读:
    解决<c:if>无else的问题
    极限挑战----3小时完成OA系统(失败)
    jstl的if标签和forEach标签的解析
    EL表达式
    JSP静态包含和动态包含的区别
    JSP九大隐式对象和四大域对象-----面试
    mybatis学习01--基础认识
    怎样将本地的代码上传到github
    随机数的生成,静态导入,可变参数的方法,方法重载,浮点数的比较
    zookeeper学习2
  • 原文地址:https://www.cnblogs.com/knighterrant/p/10919114.html
Copyright © 2011-2022 走看看