Python定时任务框架APScheduler(类似crontab)

估计好多朋友Linux中的crontab定时任务并不陌生,其实python中也是有定时任务框架的,接下来一起看看吧。

Linux 定时任务crontab

Python定时任务框架APScheduler(类似crontab)_第1张图片

简介:

APScheduler(Advanced Python Scheduler)是一个轻量级的Python定时任务调度框架(Python库)。

APScheduler有三个内置的调度系统,其中包括:

  • cron式调度(可选开始/结束时间)

  • 基于间隔的执行(以偶数间隔运行作业,也可以选择开始/结束时间)

  • 一次性延迟执行任务(在指定的日期/时间内运行作业一次)

集成的Python框架:

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

间隔时间执行任务

a:作业每10秒执行一次

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()

运行结果:

Python定时任务框架APScheduler(类似crontab)_第2张图片

b:每天下午17点15分00秒执行一次

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!!

c:每几分钟执行一次

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()

运行结果: 

d:每小时执行一次

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()

运行结果:

你可能感兴趣的:(python,触发器,python,cron,quartz,pip)