APScheduler是Python的一个定时任务框架,能够很方便的知足用户定时执行或者周期执行任务的需求,数据库
它提供了基于日期date、固定时间间隔interval 、以及相似于Linux上的定时任务crontab类型的定时任务。框架
而且该框架不只能够添加、删除定时任务,还能够将任务存储到数据库中,实现任务的持久化。async
APScheduler有四种组件及相关说明:函数
1) triggers(触发器):触发器包含调度逻辑,每个做业有它本身的触发器,用于决定接下来哪个做业会运行,除了他们本身初始化配置外,触发器彻底是无状态的。spa
2)job stores(做业存储):用来存储被调度的做业,默认的做业存储器是简单地把做业任务保存在内存中,其它做业存储器能够将任务做业保存到各类数据库中,支持MongoDB、Redis、SQLAlchemy存储方式。当对做业任务进行持久化存储的时候,做业的数据将被序列化,从新读取做业时在反序列化。线程
3) executors(执行器):执行器用来执行定时任务,只是将须要执行的任务放在新的线程或者线程池中运行。看成业任务完成时,执行器将会通知调度器。对于执行器,默认状况下选择ThreadPoolExecutor就能够了,可是若是涉及到一下特殊任务如比较消耗CPU的任务则能够选择ProcessPoolExecutor,固然根据根据实际需求能够同时使用两种执行器。code
4) schedulers(调度器):调度器是将其它部分联系在一块儿,通常在应用程序中只有一个调度器,应用开发者不会直接操做触发器、任务存储以及执行器,相反调度器提供了处理的接口。经过调度器完成任务的存储以及执行器的配置操做,如能够添加。修改、移除任务做业。 blog
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()