pu369com

APScheduler初探

   安装

pip install apscheduler

2  APScheduler最基本的用法: “定时几秒后启动job”        每个job都会以thread的方式被调度。分为BlockingScheduler与BackgroundScheduler方式

BackgroundScheduler例子(不阻塞)

from apscheduler.schedulers.background import BackgroundScheduler
import time

def job():
    print('job 3s')


if __name__=='__main__':

    sched = BackgroundScheduler(timezone='MST')
    sched.add_job(job, 'interval', id='3_second_job', seconds=3)
    sched.start()

    while(True):
        print('main 1s')
        time.sleep(1)

通过这个输出,我们也可以发现,调用start函数后,job()并不会立即开始执行。而是等待3s后,才会被调度执行。

3 add_job来添加作业(或装饰器模式添加作业)

其中,date表示具体的一次性任务,interval表示循环任务,cron表示定时任务

只执行一次  

scheduler.add_job(job2, 'date', run_date=datetime.datetime(2019, 2, 25, 19, 5, 6), args=['text'], id='job2')

每5秒执行一次:

scheduler.add_job(job1, 'interval', seconds=5, id='job1')  # 每隔5秒执行一次

每天凌晨1点30分50秒执行一次  (装饰器模式,参考https://www.cnblogs.com/Neeo/p/10435059.html#添加作业)

@sc.scheduled_job('cron', day_of_week='*', hour=1, minute='30', second='50')

 例(用IDLE直接调试可能会出错;若改用非阻塞的BackgroundScheduler,需要用while保持脚本不退出):

from apscheduler.schedulers.blocking import BlockingScheduler  # 后台运行
sc = BlockingScheduler()

@sc.scheduled_job('interval', seconds=2, id='job1')  # 每隔2秒执行一次
def check():
    print("ok...")

@sc.scheduled_job('interval', seconds=4, id='job2')  # 每隔4秒执行一次
def check1():
    print("ko...")
    
if __name__ == '__main__':
    try:
        sc.start()            
    except Exception as e:
        print('定时任务执行失败')
    finally:
       print("end")

  #每隔2分钟执行一次, */1:每隔1分钟执行一次

scheduler.add_job(job1, 'cron', minute="*/2", id='job1') 

# 每小时执行一次

scheduler.add_job(job1, 'interval', hours=1, id='job1')

# 每小时执行一次,上下浮动120秒区间内

# scheduler.add_job(job1, 'interval', hours=1, id='job1', jitter=120)

 

小结一下日常用法:

1、首先,from apscheduler.schedulers.background import BackgroundScheduler  #后台运行任务计划

2、生成对象  sc = BackgroundScheduler()

3、在要定时执行的函数头上加上装饰函数。修改cron指定运行频次:

@sc.scheduled_job('cron',day_of_week ='0-6',hour = 9,minute = 13,second = 00,id='dowork')  # 每天9点13分执行一次,id随便写

 

 

参考:https://www.jianshu.com/p/b829a920bd33

https://www.cnblogs.com/Neeo/p/10435059.html

https://www.cnblogs.com/yueerwanwan0204/p/5480870.html

posted on 2020-04-10 13:01  pu369com  阅读(273)  评论(0编辑  收藏  举报

导航