设为首页 加入收藏

TOP

Python下定时任务框架APScheduler的使用(一)
2018-10-07 10:09:22 】 浏览:157
Tags:Python 定时 任务 框架 APScheduler 使用

1.APScheduler简介:


2.APScheduler安装:


      APScheduler的安装相对来说也非常简单,可以直接利用pip安装,如果没有pip可以下载源码,利用源码安装。


      1).利用pip安装:(推荐)


      # pip install apscheduler


      2).基于源码安装:https://pypi.python.org/pypi/APScheduler/


      # python setup.py install


      3.基本概念


      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)下面一个简单的示例:


      import time
      from apscheduler.schedulers.blocking import BlockingScheduler
      def test_job():
        print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
      scheduler = BlockingScheduler()
      '''
      #该示例代码生成了一个BlockingScheduler调度器,使用了默认的默认的任务存储MemoryJobStore,以及默认的执行器ThreadPoolExecutor,并且最大线程数为10。
      '''
      scheduler.add_job(test_job, 'interval', seconds=5, id='test_job')
      '''
      #该示例中的定时任务采用固定时间间隔(interval)的方式,每隔5秒钟执行一次。
      #并且还为该任务设置了一个任务id
    scheduler.start()


  2)如果想执行一些复杂任务,如上边所说的同时使用两种执行器,或者使用多种任务存储方式,并且需要根据具体情况对任务的一些默认参数进行调整。可以参考下面的方式。(源码解析:http://apscheduler.readthedocs.io/en/latest/userguide.html


第一种方式:


      from pytz import utc
      from apscheduler.schedulers.background import BackgroundScheduler  # 导入调度器
      from apscheduler.jobstores.mongodb import MongoDBJobStore          # 导入作业存储
      from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore    # 导入作业存储
      from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor  # 导入执行器
      jobstores = {
        'mongo': MongoDBJobStore(),
        'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
      }
      executors = {
        'default': ThreadPoolExecutor(20),
        'processpool': ProcessPoolExecutor(5)
      }
      job_defaults = {
&

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android指定专用APN 下一篇JVM内存监控shell脚本

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目