1. APScheduler定时任务框架是什么?
APScheduler是一个轻量级的Python定时任务框架,可以用来执行Python函数或者Python代码片段。通过APScheduler,我们可以在指定的时间、固定的时间间隔或者某些特殊的时间点上执行任务或者Python脚本。APScheduled支持多种类型的定时任务,比如在特定日期时间点执行一次、每隔几秒、分钟、小时、天、周、月等固定时间间隔执行、通过Linux系统信号量来触发任务。
下面通过一个例子来展示如何使用简单的APScheduler定时任务。例子中创建了一个定时任务,每隔1秒钟输出当前的时间。前置条件是已经在Python环境中安装了APScheduler
库。
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
def my_job():
print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
if __name__ == '__main__':
scheduler = BlockingScheduler()
scheduler.add_job(my_job, 'interval', seconds=1)
scheduler.start()
1.1 定时任务的类型
APScheduled主要支持以下4种类型的定时任务:
date: 在指定的日期执行任务,可以设定一个日期时间参数run_date
,这个参数可以是一个datetime对象或者一个指定日期时间的字符串。
interval: 按照固定的时间间隔执行任务,可以设定一个间隔时间参数,比如秒、分、小时等。
crontab: 跟Linux系统中的crontab命令一样,按照固定的cron表达式执行任务。cron表达式是指定时间和日期的一种方式,通常由6或者7个用空格或者Tab键隔开的数字组成。
Linux系统信号量: 使用指定的Linux系统信号量来触发任务,比如SIGHUP、SIGINT、SIGTERM、SIGQUIT等。
1.2 APScheduler的安装
APScheduled是一个Python库,可以使用pip
命令进行安装。
pip install apscheduler
2. APScheduler的使用
2.1 时间安排器BlockingScheduler
时间安排器(scheduler)是APScheduler库中最常用的功能之一,它负责对定时任务进行注册、调度、运行和销毁,为定时任务的管理提供了便利。
常用的时间安排器有三种:
BlockingScheduler: 阻塞调度器,按照预定的时间触发任务。在任务执行过程中会阻塞当前线程。
BackgroundScheduler: 后台调度器,按照预定的时间触发任务。在任务执行过程中不会阻塞当前线程。
AsyncIOScheduler: 异步调度器,与AsyncIO事件循环结合使用,适合异步处理任务的场景。
下面以BlockingScheduler为例,介绍APScheduler的常用功能和使用方法。
2.2 添加定时任务
使用APScheduler添加定时任务非常简单,只需要几行代码即可。下面展示了如何添加一个按照2秒钟触发一次的定时任务,任务的函数是scheduled_job
。
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
def scheduled_job():
print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
if __name__ == "__main__":
scheduler = BlockingScheduler()
scheduler.add_job(scheduled_job, 'interval', seconds=2)
scheduler.start()
2.3 暂停和恢复定时任务
APScheduled支持对定时任务进行暂停、恢复和停止三种操作,下面分别介绍这三种操作的方法。
2.3.1 暂停任务
暂停任务是指将一个已经添加到调度器中的任务暂时停止,暂停的任务可以通过调用resume_job
方法重新恢复。
# 添加任务
scheduler = BlockingScheduler()
job = scheduler.add_job(scheduled_job, 'interval', seconds=2)
# 暂停任务
job.pause()
2.3.2 恢复任务
恢复任务是指将一个已经暂停的任务重新添加到调度器中,可以通过调用resume_job
方法实现。
# 恢复任务
job.resume()
2.3.3 停止任务
停止任务是指将一个已经添加到调度器中的任务停止执行,停止后的任务可以通过调用remove_job
方法从调度器中删除。
# 停止任务
job.remove()
2.4 更改任务的执行时间
在有些情况下,我们需要更改定时任务的执行时间,可以通过调用reschedule_job
方法实现。
scheduler = BlockingScheduler()
job = scheduler.add_job(scheduled_job, 'interval', seconds=2)
# 更改任务执行时间为3秒钟
job.reschedule('interval', seconds=3)
2.5 使用队列管理调度器中的任务
对于一些复杂的系统,在一个调度器中一般会有多个定时任务。为了方便管理和操作这些任务,我们可以将它们添加到一个队列(Queue)中,然后进行批量操作。
下面是一个例子,展示了如何将多个定时任务添加到一个队列中,并且暂停/恢复队列中的所有任务。
from queue import Queue
scheduler = BlockingScheduler()
q = Queue()
job1 = scheduler.add_job(scheduled_job1, 'interval', seconds=2)
job2 = scheduler.add_job(scheduled_job2, 'interval', seconds=3)
job3 = scheduler.add_job(scheduled_job3, 'interval', seconds=4)
q.put(job1)
q.put(job2)
q.put(job3)
# 暂停队列中的所有任务
while not q.empty():
job = q.get()
job.pause()
# 恢复队列中的所有任务
while not q.empty():
job = q.get()
job.resume()
3. 总结
APScheduler是一个轻量级的Python定时任务框架,支持多种类型的定时任务,并且提供了方便有效的API,可以极大的提高我们开发和运维的效率。