APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。apscheduler 可以当作一个跨平台的调度工具来使用,可以做为 linux 系统crontab 工具或 windows 计划任务程序的替换。注意,apscheduler 不是一个守护进程或服务,它自身不带有任何命令行工具。它主要是要在现有的应用程序中运行,也就是说,apscheduler 为我们提供了构建专用调度器或调度服务的基础模块。
如何安装?pin install apscheduler基本概念
触发器(triggers):触发器包含调度逻辑,描述一个任务何时被触发,按日期或按时间间隔或按 cronjob 表达式三种方式触发。每个作业都有它自己的触发器,除了初始配置之外,触发器是完全无状态的。
作业存储器(job stores):作业存储器指定了作业被存放的位置,默认情况下作业保存在内存,也可将作业保存在各种数据库中,当作业被存放在数据库中时,它会被序列化,当被重新加载时会反序列化。作业存储器充当保存、加载、更新和查找作业的中间商。在调度器之间不能共享作业存储。
执行器(executors):执行器是将指定的作业(调用函数)提交到线程池或进程池中运行,当任务完成时,执行器通知调度器触发相应的事件。
调度器(schedulers):任务调度器,属于控制角色,通过它配置作业存储器、执行器和触发器,添加、修改和删除任务。调度器协调触发器、作业存储器、执行器的运行,通常只有一个调度程序运行在应用程序中,开发人员通常不需要直接处理作业存储器、执行器或触发器,配置作业存储器和执行器是通过调度器来完成的。
如何使用#BlockingScheduler定时任务
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
# 输出时间
def job():
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# 实例化一个BlockingScheduler类(调度器),不带参数使用默认的作业存储器-内存最大并发线程10
scheduler = BlockingScheduler()
'''
触发器包含:corn(固定时间间隔),interval(固定时间间隔触发),date(特定时间点)
'''
#job是要调度的作业程序,这里标识周一到周五的14点每分钟执行一次
scheduler.add_job(job, "cron", day_of_week="1-5", hour=14, minute='*')
scheduler.start()
cron触发器
| 参数 | 说明 |
|---|---|
| year | 年,4位数 |
| month | 月1-12 |
| day | 日1-31 |
| week | 周1-53 |
| day_of_week | 周内第几天或者星期几(0-6或者mon,tue,wed,thu,fri,sat,sum) |
| hour | 时0-23 |
| minute | 分0-59 |
| second | 秒0-59 |
| start_date | 开始日期 |
| end_date | 结束日期 |
| timezone | 指定时区 |
scheduler.add_job(job, 'cron', hour=1, minute=5) # hour =19 , minute =23 这里表示每天的19:23 分执行任务 # hour ='19', minute ='23' 这里可以填写数字,也可以填写字符串 # hour ='19-21', minute= '23' 表示 19:23、 20:23、 21:23 各执行一次任务 # hour ='14', minute = '*' 表示14点每分钟触发一次 #在1月,3月,5月,7-9月,每天的下午2点,每一分钟执行一次任务 scheduler .add_job(func=job, trigger='cron', month='1,3,5,7-9', day='*', hour='14', minute='*') # 当前任务会在 6、7、8、11、12 月的第三个周五的 0、1、2、3 点执行 scheduler .add_job(job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')interval触发器
| 参数 | 说明 |
|---|---|
| weeks | 间隔几周 |
| days | 间隔几天 |
| hours | 间隔几小时 |
| minutes | 间隔几分钟 |
| seconds | 间隔几秒 |
| start_date | 开始日期 |
| end_date | 结束日期 |
| timezone | 时区 |
#每300秒执行一次 scheduler .add_job(job, 'interval', seconds=300) #从开始时间到结束时间,每隔俩小时运行一次 scheduler .add_job(job, 'interval', hours=2, start_date='2018-01-10 09:30:00', end_date='2018-06-15 11:00:00')date触发器
指定时间触发,作业任务只会执行一次。
参数run_date作业运行日期或者时间,timezone指定时区
学习链接:https://blog.csdn.net/somezz/article/details/83104368,https://blog.csdn.net/h18208975507/article/details/108797671



