APScheduler事件监听功能

2020-11-30  本文已影响0人  不上进的码农

先说一下背景
一个项目在开发过程中使用apscheduler来管理定时任务,通过redis,在偶然间遇到定时任务不执行的情况,仔细排查了一下,是在设置好的任务执行时间点并没有去执行,在远过于设置时间之后才去执行设置的任务,在这种情况下apscheduler判断当前时间已经和设置的时间相差太大而不去执行此次任务,当然在这种情况下我们可以设置misfire_grace_time(单位s)参数来决定在误差范围内继续执行这个任务,如

scheduler.add_job(start, 'interval', days=1, coalesce=True, misfire_grace_time=60, start_date='2020-11-23 00:00:01', end_date='2020-12-30 11:59:59')

但感觉这不是解决问题的根本原因,在测试环境中也没有办法查看apscheduler的debug信息,(而且在不执行的时候Event还监听不到exception信息),在找了一些资料后发现Event.code挺好用,整理了一下,如下:

def job_listener(Event):
print(Event.dict)

{'code': 4096, 'alias': None, 'job_id': 'jsc_355_begin', 'jobstore': 'redis', 'scheduled_run_time': datetime.datetime(2020, 11, 30, 15, 43, 45, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), 'retval': None, 'exception': None, 'traceback': None}

Event.code 以下是整理的 常量

EVENT_SCHEDULER_SHUTDOWN = 2 ** 1  //  2    调度程序已关闭
EVENT_SCHEDULER_PAUSED = 2 ** 2   //  4     调度程序中的作业处理已暂停
EVENT_SCHEDULER_RESUMED = 2 ** 3   //  8    调度程序中的作业处理已恢复
EVENT_EXECUTOR_ADDED = 2 ** 4    //   16    将执行程序添加到调度程序中
EVENT_EXECUTOR_REMOVED = 2 ** 5   //  32    遗嘱执行人被移交给调度员
EVENT_JOBSTORE_ADDED = 2 ** 6   //   64     作业存储已添加到调度程序
EVENT_JOBSTORE_REMOVED = 2 ** 7   //  128   作业存储已从调度程序中删除
EVENT_ALL_JOBS_REMOVED = 2 ** 8   //  256   所有作业已从所有作业存储库或一个特定的作业存储库中删除
EVENT_JOB_ADDED = 2 ** 9    //  512      作业已添加到作业存储中
EVENT_JOB_REMOVED = 2 ** 10  //  1024    从作业存储中删除了作业
EVENT_JOB_MODIFIED = 2 ** 11   //  2048     从计划程序外部修改了作业
EVENT_JOB_EXECUTED = 2 ** 12  // 4096    作业已成功执行
EVENT_JOB_ERROR = 2 ** 13  // 8192   作业在执行期间引发异常
EVENT_JOB_MISSED = 2 ** 14  // 16384   错过了工作执行
EVENT_JOB_SUBMITTED = 2 ** 15 // 32768    作业已提交给执行者以运行
EVENT_JOB_MAX_INSTANCES = 2 ** 16 // 65536   提交给执行者的作业未被执行者接受,因为该作业已达到其最大并发执行实例数

上一篇 下一篇

猜你喜欢

热点阅读