调度器
APScheduler提供了以下7种调度器供使用,你可以根据项目的特点和需要从中选择一个使用,所有的调度器的使用方法都是一致的。
BlockingScheduler,调度器在主线程执行,执行时会阻塞主线程。BackgroundScheduler,调度器在后台线程执行,不会阻塞主线程。AsyncIOScheduler,基于asyncio模块的异步调度器。GeventScheduler,基于Gevent并发框架的异步调度器,使用时需要GeventExecutor配合。TornadoScheduler,基于TornadoWeb框架的异步调度器。TwistedScheduler,基于Twisted异步网络框架的异步调度器,使用时需要TwistedExecutor配合。QtScheduler,用于Qt应用,使用QTimer完成任务唤醒。
以BlockingScheduler为例,在建立调度器的时候,需要为其指定任务存储器和执行器,还有任务默认配置。这三种内容可以在创建调度器实例时指定,也可以使用调度器的.configure()方法指定。调度器完成配置并添加任务后,即可调用.start()方法启动。如果需要停止任务调度,可以调用方法.shutdown()。
以下是一个最简单的示例,其中不带有任何需要调度的任务。
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.start()
这个最简单的示例中将会使用内存任务存储器,并且所有的配置都会使用默认值。
向调度器中添加任务有两种方式:通过.add_job()方法和@scheduled_job()修饰器。其中使用.add_job()方法添加的任务,可以通过返回的apscheduler.job.Job实例对任务进行修改和移除。向调度器中添加和修改、删除任务可参考以下示例。
job = scheduler.add_job(some_function, 'interval', minutes=2)
job.modify(max_instance=6, name='Some another job') # 修改任务
job.remove() # 移除任务