调度器

APScheduler提供了以下7种调度器供使用,你可以根据项目的特点和需要从中选择一个使用,所有的调度器的使用方法都是一致的。

  • BlockingScheduler,调度器在主线程执行,执行时会阻塞主线程。
  • BackgroundScheduler,调度器在后台线程执行,不会阻塞主线程。
  • AsyncIOScheduler,基于asyncio模块的异步调度器。
  • GeventScheduler,基于Gevent并发框架的异步调度器,使用时需要GeventExecutor配合。
  • TornadoScheduler,基于Tornado Web框架的异步调度器。
  • 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() # 移除任务