APScheduler中的EVENT使用监听处理

1、导读

环境:Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4

背景:工作出现bug,需要监控事件的发生,此处使用APScheduler提供的add_listener方式

事件:20240911

说明:记录,方便后期自己查找

2、实现方法

from pytz import utc, timezone
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_ALL
from django_apscheduler.jobstores import DjangoJobStore


def my_listener(event):
    """调度事件监听"""
    print(event.code, "----------------------------------------------------")


# 配置执行器,并设置线程数
executors = {
    'default': ThreadPoolExecutor(20),
    'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
    'coalesce': False,     # 默认情况下关闭新的作业
    'max_instances': 3     # 设置调度程序将同时运行的特定作业的最大实例数3
}


scheduler = BackgroundScheduler(executors=executors, job_defaults=job_defaults, timezone=timezone('Asia/Shanghai'))

scheduler.add_jobstore(DjangoJobStore(), "default")

scheduler.add_listener(my_listener, EVENT_ALL)
scheduler.start()

3、流程说明

APScheduler的事件监控指的是,当该事件发生时,会触发相应的动作(你指定的函数)。上面使用的是EVENT_ALL这个参数,即:所有能触发的动作,均会调用my_listener函数,比如附录中的启动调度器、关闭调度器、添加job、添加jobstore等所有动作。附录中的动作摘自源码,理论上而言,就是APScheduler支持的所有事件了。我们可以通过event的code属性获取代码的值,比如获取的是1,则表明执行的scheduler启动的操作。如果你仅需要监控添加任务的动作,示例中的EVENT_ALL换为EVENT_JOB_ADDED即可。

4、附录

APScheduler各EVENT触发条件说明
常量名称代码触发说明    触发条件
EVENT_SCHEDULER_STARTED1调度程序启动scheduler.start()
EVENT_SCHEDULER_SHUTDOWN2调度程序关闭scheduler.shutdown()
EVENT_SCHEDULER_PAUSED4调度程序暂停scheduler.pause()
EVENT_SCHEDULER_RESUMED8调度程序恢复scheduler.resume()
EVENT_EXECUTOR_ADDED16调度程序添加执行器scheduler.add_executor()
EVENT_EXECUTOR_REMOVED32调度程序删除执行器scheduler.remove_executor()
EVENT_JOBSTORE_ADDED64调度程序添加作业存储器scheduler.add_jobstore()
EVENT_JOBSTORE_REMOVED128调度程序删除作业存储器scheduler.remove_jobstore()
EVENT_ALL_JOBS_REMOVED256删除所有jobscheduler.remove_all_jobs()
EVENT_JOB_ADDED512添加jobscheduler.add_job()
EVENT_JOB_REMOVED1024删除jobscheduler.remove_job()
EVENT_JOB_MODIFIED2048暂停、恢复、修改job

scheduler.pause_job()

scheduler.resume_job()

scheduler.modify_job()

EVENT_JOB_EXECUTED4096job成功执行任务执行成功后,自动触发
EVENT_JOB_ERROR8192job执行出现错误任务执行出现异常,自动触发
EVENT_JOB_MISSED16384job执行丢失错过执行时间,比如:add_job的时候,执行时间为过去的时间,即可触发该条件
EVENT_JOB_SUBMITTED32768job提交未测试
EVENT_JOB_MAX_INSTANCES65536超过最大实例未执行未测试
EVENT_ALL以上所有以上所有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值