Python - APScheduler定时任务
APScheduler简介
APScheduler(Advanced Python Scheduler)是一个轻量级的Python定时任务调度框架(Python库)。
APScheduler有三个内置的调度系统,其中包括:
- cron式调度(可选开始/结束时间)
- 基于间隔的执行(以偶数间隔运行作业,也可以选择开始/结束时间)
- 一次性延迟执行任务(在指定的日期/时间内运行作业一次)
安装&使用
APScheduler下载安装
pip install apscheduler==3.6.3 若超时时使用豆瓣源:pip install -i https://pypi.doubanio.com/simple/ apscheduler
使用
当需要调度作业时,为这个作业选择一个触发器,用来描述该作业将在何时被触发,APScheduler有3中内置的触发器类型:
- 新建一个调度器(scheduler)
- 添加一个调度任务(job store)
- 运行调度任务
有两种方式可以添加一个新的作业:
- add_job来添加作业
- 装饰器模式添加作业
只执行一次:
import datetime from apscheduler.schedulers.blocking import BlockingScheduler # 定时器执行的函数 def job2(text): print('job2', datetime.datetime.now(), text) # 新建一个调度器 scheduler = BlockingScheduler() # 新建任务:2021年4月1日21点38分06秒执行一次 scheduler.add_job(job2, 'date', run_date=datetime.datetime(2021, 4, 1, 21, 38, 6), args=['text'], id='job2') # 运行任务 scheduler.start()
只在2021年4月1日 21点38分06秒执行一次,args传递一个text参数。
间隔执行
# ------------间隔执行---------------- import datetime from apscheduler.schedulers.blocking import BlockingScheduler # 触发执行函数 def job1(): print("job1", datetime.datetime.now()) scheduler = BlockingScheduler() # 每隔5秒执行一次 # scheduler.add_job(job1, 'interval', seconds=5, id='job1') # 每隔2分钟执行一次,*/1:每隔1分钟执行一次 # scheduler.add_job(job1, "cron", minute="*/2", id="job1") # 每1个小时执行一次 scheduler.add_job(job1, "interval", hours=1, id="job1") scheduler.start()
每天凌晨1点30分50秒执行一次
#!/usr/bin/env python # -*- coding: utf-8 -*- # author: 青城子 # datetime: 2021/4/1 21:03 # ide: PyCharm from apscheduler.schedulers.blocking import BlockingScheduler # 后台运行 sc = BlockingScheduler() f = open('t1.txt', 'a', encoding='utf8') # day_of_week='*'每周,hour=1 小时 minute=30分 second=50秒 # 每天凌晨1:30分50秒执行一次 @sc.scheduled_job('cron', day_of_week='*', hour=22, minute='15', second='50') def check_db(): print(111111111111) if __name__ == '__main__': try: sc.start() f.write('定时任务成功执行') except Exception as e: sc.shutdown() f.write('定时任务执行失败') finally: f.close()