BlockingScheduler使用和参数解释详细版本

功能介绍

schedulers 调度器主要分三种,一种独立运行的,一种是后台运行的,最后一种是配合其它程序使用 BlockingScheduler: 当这个调度器是你应用中 唯一要运行 的东西时使用
BackgroundScheduler: 当 不运行其它框架 的时候使用,并使你的任务在后台运行
AsyncIOScheduler: 当你的程序是 异步IO模型 的时候使用

我的项目用到的是BlockingScheduler,所以这里只记录了BlockingScheduler的使用和参数解释。

使用实践

import time

from apscheduler.schedulers.blocking import BlockingScheduler

scheduler = BlockingScheduler()


def task1(x):
    print(f'task1执行{x}', time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))


scheduler.add_job(
    task1, 'interval', seconds=10, args=['xxx'], id='task1', replace_existing=True
)


def task2(y):
    print(f'task2执行{y}', time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))


scheduler.add_job(
    task2, 'cron', second='*/5', args=['yyy'], id='task2', replace_existing=True
)

scheduler.start()

while True:
    print('如果被阻塞,这一段不会执行')
    time.sleep(1)

task1:每隔10s执行一次
task2:每5s执行一次,相当于interval 间隔调度中seconds = 5

输出结果
在这里插入图片描述
可以看到结果中task1每10秒执行一次,task2每5秒执行一次。

参数解释

add.jobs()方法的参数解释

  1. task1:要执行的方法名
  2. ‘interval’,‘cron’,‘date’:任务执行模式规则
    interval:每隔一定的时间进行调度任务。
 'interval', seconds=10#每间隔10s执行一次
  'interval', minutes=10#每间隔10s执行一次
   'interval', hours=10#每间隔10s执行一次
    'interval'#不支持设置天和月的单位
    'interval', hours=2, start_date='2024-01-10 09:30:00', end_date='2024-06-15 11:00:00'#从开始时间到结束时间,每隔俩小时运行一次

date:在设定的时间调度任务,但是只能执行一次。

"date",run_date="2021-11-29 21:16:00") 在设定的时间执行,只执行一次

cron:在设定的时间调度任务。

 "cron", day_of_week="0-4", hour=6, minute=30#周一到周五每天6:30执行
 'cron', hour=6, minute=30,second=10#每天6:30:10执行一次
 'cron', hour ='6', minute ='30',second='10'#等价于上面,这里可以填写数字,也可以填写字符串
 'cron',hour ='19-21', minute= '23'   #表示 19:23、 20:23、 21:23 各执行一次任务
 'cron', month='1,3,5,7-9', day='*', hour='14', minute='*'#在1月,3月,5月,7-9月,每天的下午2点,每一分钟执行一次任务
 'cron', month='6-8,11-12', day='3rd fri', hour='0-3'#会在 6、7、8、11、12 月的第三个周五的 0、1、2、3 点执行
  1. 定时任务传参
    使用 args=[参数1] 或 kwargs={“参数名1”: “参数1”} 传参
  2. 避免已有作业重新添加到数据库
    replace_existing=True:数据库已有任务的话,重新启动程序不会报错,设置为False或者不设置会报错。

Scheduler 任务操作方法

  1. 添加任务—add_job
 scheduler.add_job(job_obj,args,id,trigger,**trigger_kwargs)
  1. 删除任务—remove_job
 scheduler.remove_job(job_id,jobstore=None)
  1. 暂停任务—pause_job
 scheduler.pause_job(job_id,jobstore=None)
  1. 恢复任务—resume_job
scheduler.resume_job(job_id,jobstore=None)

5.修改某个任务属性信息—modify_job

scheduler.modify_job(job_id,jobstore=None,**changes)
  1. 修改单个作业的触发器并更新下次运行时间—reschedule_job
scheduler.reschedule_job(job_id,jobstore=None,trigger=None,**trigger_args)

7.输出作业信息—print_jobs

scheduler.print_jobs(jobstore=None,out=sys.stdout)

Scheduler 事件监听(add_listener)

import time

from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERROR

scheduler = BlockingScheduler()


def task1(x):
    print(f'task1执行{x}', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))


def task2(y):
    print(f'task2执行{y}', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))


def jib_listener(event):
    if event.exception:
        print('任务出错')
    else:
        print('任务正常运行')


if __name__ == '__main__':
    scheduler.add_job(
        task1, 'interval', seconds=10, args=['xxx'], id='task1', replace_existing=True)

    scheduler.add_job(
        task2, 'cron', second='*/5', args=['yyy'], id='task2', replace_existing=True)
    scheduler.add_listener(jib_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
    scheduler.start()

使用到的事件状态,需要导入

from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERROR

运行结果:因为没有添加异常的方法,所以只有正常运行的监听,也可以添加失败的方式测试一下。

在这里插入图片描述

参考文档

参数设置:参数设置
详细入门:详细入门

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值