估计好多朋友Linux中的crontab定时任务并不陌生,其实python中也是有定时任务框架的,接下来一起看看吧。
Linux 定时任务crontab
APScheduler(Advanced Python Scheduler)是一个轻量级的Python定时任务调度框架(Python库)。
APScheduler有三个内置的调度系统,其中包括:
cron式调度(可选开始/结束时间)
基于间隔的执行(以偶数间隔运行作业,也可以选择开始/结束时间)
一次性延迟执行任务(在指定的日期/时间内运行作业一次)
APScheduler内继承了几个常见的Python框架:
asyncio
gevent
tornado
qt
使用pip 安装:
pip install apscheduler
其他pip安装问题请参考链接
当你需要调度作业的时候,你需要为这个作业选择一个触发器,用来描述该作业将在何时被触发,
APScheduler有3中内置的触发器类型:
新建一个调度器(scheduler)
添加一个调度任务(job store)
运行调度任务
有两种方式可以添加一个新的作业:
add_job来添加作业
装饰器模式添加作业
只在2020-08-11 16:50:00执行一次,args传递一个text参数
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
def job(text):
print('job',datetime.datetime.now(),text)
scheduler = BlockingScheduler()
scheduler.add_job(job,'date',run_date=datetime.datetime(2020,8,11,16,50,0),args=['test success'],id = 'job')
scheduler.start()
运行结果:
job 2020-08-11 16:50:00.006340 test success
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
def job1():
print('job1',datetime.datetime.now())
scheduler = BlockingScheduler()
scheduler.add_job(job1,'interval',seconds = 10 ,id = 'job1') #每隔10秒执行一次
scheduler.start()
运行结果:
from apscheduler.schedulers.blocking import BlockingScheduler
sc = BlockingScheduler()
f = open('test_log.log','a',encoding='utf-8')
@sc.scheduled_job('cron', day_of_week='*', hour=17, minute='15', second='00')
def check_db():
print("success!!")
if __name__ == '__main__':
try:
sc.start()
f.write('定时任务执行完成')
except Exception as e:
sc.shutdown()
f.write('定时任务执行失败')
finally:
f.close()
运行结果:success!!
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
def job2():
print('job2',datetime.datetime.now())
scheduler = BlockingScheduler()
# 每隔2分钟执行一次, */2 每隔2分钟执行一次
scheduler.add_job(job2,'cron',minute= "*/2",id='job2')
scheduler.start()
运行结果:
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
def job3():
print('job3',datetime.datetime.now())
scheduler = BlockingScheduler()
#每隔一小时执行一次
scheduler.add_job(job3,'interval',hours = 1 ,id = 'job3')
#每小时执行一次,上下浮动120秒区间内
#scheduler.add_job(job3,'interval',hours = 1,id='job3',jitter=120)
scheduler.start()
运行结果: