python定时任务框架APSchedule
一直想做一个分布式的调度系统,但不知道如何实现类似crontab那样的定时调度,发现有现成的轮子可用,那就是——APSchedule
它有三种调度方式,分别是
date 日期:触发任务运行的具体日期
interval 间隔:触发任务运行的时间间隔
cron 周期:触发任务运行的周期
下面以案例的方式,给大家做个简单的介绍
date.py
from datetime import datetime from apscheduler.schedulers.blocking import BlockingScheduler #任务会在指定的固定时刻启动 def job(text): now = datetime.now() print(now.strftime('%Y-%m-%d %H:%M:%S')) print(text) scheduler = BlockingScheduler() scheduler.add_job(job, 'date', run_date=date(2020, 9, 4), args=['text1']) scheduler.add_job(job, 'date', run_date=datetime(2020, 9, 4, 11, 4, 0), args=['text2']) scheduler.start()
interval.py
from datetime import datetime from apscheduler.schedulers.blocking import BlockingScheduler # 任务会每间隔一段时间执行一次,也可以设置开始和结束的时间 def job(text): now = datetime.now() print(now.strftime('%Y-%m-%d %H:%M:%S')) print(text) scheduler = BlockingScheduler() scheduler.add_job(job, 'interval', minutes=1, args=['text1']) scheduler.add_job(job, 'interval', seconds=30, start_date='2020-09-04 11:02:01', end_date='2020-09-04 11:05:04', args=['text1']) scheduler.start()
cron.py
from datetime import datetime from apscheduler.schedulers.blocking import BlockingScheduler scheduler = BlockingScheduler() # 最接近于Linux系统的crontab # 以装饰器的方式运行 @scheduler.scheduled_job('cron', second='*/7', args=['job']) def job(text): now = datetime.now() print(now.strftime('%Y-%m-%d %H:%M:%S')) print(text) # 调用add_job运行 # scheduler.add_job(job, 'cron', hour=11, minute='*/1', args=['job1']) scheduler.start()
添加任务
添加任务的方法有两种:
- 通过调用add_job()
- 通过装饰器scheduled_job()
第一种方法是最常用的方法。第二种方法主要是方便地声明在应用程序运行时不会更改的任务。该 add_job()方法返回一个apscheduler.job.Job实例,可以使用该实例稍后修改或删除该任务。
参考: