在许多应用程序中,需要定期执行某些任务,例如发送电子邮件、生成报告或清理临时文件等。为了管理和调度这些任务,Python中有许多优秀的调度器库,其中APScheduler是一个流行且功能强大的选择。本文将介绍APScheduler的基本概念,并展示如何使用它来实现定时任务调度。
一、APScheduler简介
APScheduler是一个轻量级的Python任务调度库,提供了多种调度器(Scheduler)、触发器(Trigger)和作业存储(Job Store)等组件,可以满足各种定时任务调度需求。它的特点包括:
灵活的调度方式:支持间隔调度、定时调度、CRON表达式调度等多种调度方式。
多种触发器:提供了简单的时间触发器、日期触发器、CRON触发器等多种触发器类型。
可扩展的作业存储:支持内存、数据库等多种作业存储方式,方便管理和持久化存储作业信息。
二、安装APScheduler
在开始使用APScheduler之前,首先需要安装该库。
pip install apscheduler
三、使用示例
1 创建定时任务
下面是一个简单的示例,演示了如何使用APScheduler创建一个每隔5秒执行一次的定时任务。
"""
interval参数说明
weeks (int) number of weeks to wait
days (int) number of days to wait
hours (int) number of hours to wait
minutes (int) number of minutes to wait
seconds (int) number of seconds to wait
start_date (datetime|str) starting point for the interval calculation
end_date (datetime|str) latest possible date/time to trigger on
timezone (datetime.tzinfo|str) time zone to use for the date/time calculations
--------------------------------------------------------------------------------
weeks (int) 间隔几周
days (int) 间隔几天
hours (int) 间隔几小时
minutes (int) 间隔几分钟
seconds (int) 间隔多少秒
start_date (datetime 或 str) 开始日期
end_date (datetime 或 str) 结束日期
timezone (datetime.tzinfo 或str) 用于日期/时间计算的时区
"""
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
# 定义任务函数
def job_function():
print("Hello World")
# 创建调度器
sched = BlockingScheduler()
# 安排每两小时调用一次
sched.add_job(job_function, 'interval', hours=2)
# 与之前相同,但于2010年10月10日9:30开始,于2014年6月15日11:00停止
sched.add_job(job_function, 'interval', hours=2, start_date='2010-10-10 09:30:00', end_date='2014-06-15 11:00:00')
# 启动调度器
sched.start()
2 使用CRON表达式
除了间隔调度外,APScheduler还支持使用CRON表达式来指定定时调度。
"""
cron参数说明
year (int|str) – 4-digit year
month (int|str) – month (1-12)
day (int|str) – day of the (1-31)
week (int|str) – ISO week (1-53)
day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun)
hour (int|str) – hour (0-23)
minute (int|str) – minute (0-59)
second (int|str) – second (0-59)
start_date (datetime|str) – earliest possible date/time to trigger on (inclusive)
end_date (datetime|str) – latest possible date/time to trigger on (inclusive)
timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone)
"""
from apscheduler.schedulers.blocking import BlockingScheduler
def job_function():
print("Hello World")
# 创建调度器
sched = BlockingScheduler()
# 6月、7月、8月、11月和12月的00:00、01:00、02:00和03:00
sched.add_job(job_function, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')
# 周一至周五上午5:30运行至2014-05-30 00:00:00
sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2014-05-30')
# 每天凌晨1点执行任务
scheduler.add_job(job_function, 'cron', hour=1, minute=0)
# 启动调度器
sched.start()
3 添加任务监听器
可以添加任务监听器来监听任务的执行状态,例如任务开始、任务执行出错等。
def my_listener(event):
if event.exception:
print('任务出错了!')
scheduler.add_listener(my_listener, 'job_error')
四、高级用法
1 添加持久化存储
可以将任务调度信息存储到持久化存储中,以便在应用重启后恢复调度状态。
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
jobstores = {
'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
scheduler = BlockingScheduler(jobstores=jobstores)
结语
通过本文的介绍,您已经了解了APScheduler的基本概念及如何使用它来实现定时任务调度。APScheduler提供了丰富的调度方式和灵活的配置选项,能够满足各种复杂的任务调度需求。在实际应用中,可以根据具体情况选择合适的调度方式和配置选项,并根据需要添加任务监听器和持久化存储,以提高任务调度的可靠性和可维护性。
标签:Python,job,介绍,调度,APScheduler,int,str,date From: https://www.cnblogs.com/ningningqi/p/18085030