Apscheduler
Apscheduler是一个基于Quartz的python定时任务框架,提供了基于日期、固定时间间隔以及corntab类型的任务,并且可持久化任务。
安装apscheduler
依赖库
pip install apscheduler
APScheduler组件:
- schedulers -调度器
- triggers -触发器
- job stores -作业存储器
- executors -执行器
schedulers(调度器)
- BlockingScheduler 阻塞式调度器:适用于只跑调度器的程序。(常用)
- BackgroundScheduler 后台调度器:适用于非阻塞的情况,调度器会在后台独立运行。(常用)
- AsyncIOScheduler AsyncIO调度器,适用于应用使用AsnycIO的情况。
- GeventScheduler Gevent调度器,适用于应用通过Gevent的情况。
- TornadoScheduler Tornado调度器,适用于构建Tornado应用。
- TwistedScheduler Twisted调度器,适用于构建Twisted应用。
- QtScheduler Qt调度器,适用于构建Qt应用。
triggers(触发器)
1、date 触发器
参数 | 说明 |
---|---|
run_date (datetime 或 str) | 作业的运行日期或时间 |
timezone (datetime.tzinfo 或 str) | 指定时区 |
2、interval 触发器,固定时间间隔触发。
参数 | 说明 |
---|---|
weeks (int) | 间隔几周 |
days (int) | 间隔几天 |
hours (int) | 间隔几小时 |
minutes (int) | 间隔几分钟 |
seconds (int) | 间隔多少秒 |
start_date (datetime 或 str) | 开始日期 |
end_date (datetime 或 str) | 结束日期 |
timezone (datetime.tzinfo 或str) |
3、cron 触发器,在特定时间周期性地触发,和Linux crontab格式兼容。
参数 | 说明 |
---|---|
year (int 或 str) | 年,4位数字 |
month (int 或 str) | 月 (范围1-12) |
day (int 或 str) | 日 (范围1-31) |
week (int 或 str) | 周 (范围1-53) |
day_of_week (int 或 str) | 周内第几天或者星期几 (范围0-6 或者 mon,tue,wed,thu,fri,sat,sun) |
hour (int 或 str) | 时 (范围0-23) |
minute (int 或 str) | 分 (范围0-59) |
second (int 或 str) | 秒 (范围0-59) |
start_date (datetime 或 str) | 最早开始日期(包含) |
end_date (datetime 或 str) | 最晚结束时间(包含) |
timezone (datetime.tzinfo 或str) | 指定时区 |
job store (作业存储)
该组件是对调度任务的管理,添加 job 有两种添加方法,其中一种是 .add_job()
, 另一种则是@scheduled_job()
装饰器来修饰函数。
示例1:
# .add_job()
from apscheduler.schedulers.background import BackgroundScheduler
import time
# 定义一个job方法
def job_fun():
print("this is a work function job")
if __name__ == '__main__':
# 创建后台调度器
scheduler = BlockingScheduler()
# 添加定时任务,每隔5秒执行一次
scheduler.add_job(job_fun, 'interval', seconds=5, args=[1], max_instances=3)
# 启动调度器
scheduler.start()
示例2:
import time
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler()
# 每隔 5秒钟
@scheduler.scheduled_job('interval', seconds=5)
def job1():
print('----- this is interval scheduled_job. -----')
# 每隔 10秒钟
@scheduler.scheduled_job('cron', second='*/10')
def job2():
print('==== this is cron scheduled_job ====')
scheduler.start()
阻塞和非阻塞
- APScheduler提供了阻塞和非阻塞两种调度器类型,BackgroundScheduler和BlockingScheduler,是两种类型 常用 的调度器,用于创建定时任务。
- 主要区别:BackgroundScheduler在后台运行,不会阻塞主线程;而BlockingScheduler会阻塞主线程直到所有任务完成。
BackgroundScheduler例子
from apscheduler.schedulers.background import BackgroundScheduler
import time
def job():
print('job 3s')
if __name__=='__main__':
# BackgroundScheduler调用start函数后并不会阻塞当前线程,所以可以继续执行主程序中while循环的逻辑。
sched = BackgroundScheduler(timezone='MST')
sched.add_job(job, 'interval', id='3_second_job', seconds=3)
sched.start()
while(True): # while会被执行
print('main 1s')
time.sleep(1)
BlockingScheduler例子:
from apscheduler.schedulers.blocking import BlockingScheduler
import time
def job():
print('job 3s')
if __name__=='__main__':
sched = BlockingScheduler(timezone='MST')
sched.add_job(job, 'interval', id='3_second_job', seconds=3)
sched.start()
while(True): # 不会被执行到
print('main 1s')
time.sleep(1)
标签:__,int,python,调度,apscheduler,job,str,定时,BlockingScheduler
From: https://www.cnblogs.com/lanjianhua/p/18372327