python apscheduler添加监听器listener,用于自动化任务的反馈

apscheduler可以通过添加监听器,得到定时任务的反馈。监听会监听到的是apscheduler.events,进入apscheduler/events.py文件中可以看到,使用常量对事件的定义:

EVENT_SCHEDULER_STARTED = EVENT_SCHEDULER_START = 2 ** 0
EVENT_SCHEDULER_SHUTDOWN = 2 ** 1
EVENT_SCHEDULER_PAUSED = 2 ** 2
EVENT_SCHEDULER_RESUMED = 2 ** 3
EVENT_EXECUTOR_ADDED = 2 ** 4
EVENT_EXECUTOR_REMOVED = 2 ** 5
EVENT_JOBSTORE_ADDED = 2 ** 6
EVENT_JOBSTORE_REMOVED = 2 ** 7
EVENT_ALL_JOBS_REMOVED = 2 ** 8
EVENT_JOB_ADDED = 2 ** 9
EVENT_JOB_REMOVED = 2 ** 10
EVENT_JOB_MODIFIED = 2 ** 11
EVENT_JOB_EXECUTED = 2 ** 12
EVENT_JOB_ERROR = 2 ** 13
EVENT_JOB_MISSED = 2 ** 14
EVENT_JOB_SUBMITTED = 2 ** 15
EVENT_JOB_MAX_INSTANCES = 2 ** 16

常量描述事件类

  • EVENT_SCHEDULER_STARTED:调度程序已启动
  • EVENT_SSCHEDULER_SHUTDOWN:计划程序已关闭
  • EVENT_SSCHEDULER_PAUSED:计划程序中的作业处理已暂停
  • EVENT_SSCHEDULER_RESUMED:计划程序中的作业处理已恢复
  • EVENT_EXECUTOR_ADDED:已将一个执行程序添加到调度程序
  • EVENT_EXECUTOR_REMOVED:已将执行程序删除到计划程序
  • EVENT_JOBSTORE_ADDED:已将作业存储添加到调度程序
  • EVENT_JOBSTORE_REMOVED:已从计划程序中删除作业存储
  • EVENT_ALL_JOBS_REMOVED:所有作业都已从所有作业存储或一个特定作业存储中删除
  • EVENT_JOB_ADDED:作业已添加到作业存储
  • EVENT_JOB_REMOVED:已从作业存储中删除作业
  • EVENT_JOB_MODIFIED:从调度程序外部修改了作业
  • EVENT_JOB_SUBMIT:已将作业提交给其执行者

示例程序

from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.events import EVENT_JOB_ERRORdef print_each_five_seconds():print(f"=== 自动化每5s执行一次:{datetime.now()} ===")raise  # 主动报错def my_listener(event):print(event)if event.code == EVENT_JOB_ERROR:  # 报错信息 或使用 event.code==EVENT_JOB_ERROR 判断也行print(f"{event.scheduled_run_time} 定时任务报错 {event.exception}")def main():print("============================ 启动 自动化 ============================")# 1.创建调度器scheduler = BackgroundScheduler()# 2. 添加任务scheduler.add_job(print_each_five_seconds, 'interval', seconds=5)scheduler.add_listener(my_listener) # 添加监听# 3.满足条件执行器scheduler.start()if __name__ == '__main__':main()

得到结果:

============================ 启动 自动化 ============================
<SchedulerEvent (code=16)>
<SchedulerEvent (code=64)>
<JobEvent (code=512)>
<SchedulerEvent (code=1)>=== 自动化每5s执行一次:2024-03-12 15:18:09.146576 ===
<JobSubmissionEvent (code=32768)>
<JobExecutionEvent (code=8192)>
2024-03-12 15:18:09.143157+08:00 定时任务报错 No active exception to reraise
Job "print_each_five_seconds (trigger: interval[0:00:05], next run at: 2024-03-12 15:18:14 CST)" raised an exception
Traceback (most recent call last):File "C:\Users\User4\Anaconda3\envs\qlib_learn\lib\site-packages\apscheduler\executors\base.py", line 125, in run_jobretval = job.func(*job.args, **job.kwargs)File "E:/dingzeng/granfna_helper/test/add_scheduler_listener/check_a.py", line 10, in print_each_five_secondsraise  # 主动报错
RuntimeError: No active exception to reraise
<JobSubmissionEvent (code=32768)>=== 自动化每5s执行一次:2024-03-12 15:18:14.148286 ===
<JobExecutionEvent (code=8192)>
2024-03-12 15:18:14.143157+08:00 定时任务报错 No active exception to reraise
Job "print_each_five_seconds (trigger: interval[0:00:05], next run at: 2024-03-12 15:18:19 CST)" raised an exception
Traceback (most recent call last):File "C:\Users\User4\Anaconda3\envs\qlib_learn\lib\site-packages\apscheduler\executors\base.py", line 125, in run_jobretval = job.func(*job.args, **job.kwargs)File "E:/dingzeng/granfna_helper/test/add_scheduler_listener/check_a.py", line 10, in print_each_five_secondsraise  # 主动报错
RuntimeError: No active exception to reraise

可以看到 ,我们可以根据code获取事件的结果,并给与反馈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Games101笔记-计算机图形学概述

光栅化&#xff1a;把三维空间的几何形体显示在屏幕上 实时&#xff1a;每秒30帧的画面 曲线和曲面&#xff1a; 如何表示一条光滑曲线&#xff0c;如何表示曲面如何用简单的曲面通过细分的方法得到更复杂的曲面在形状发生变化时&#xff0c;面要如何变化&#xff0c;如何保…

深入学习默认成员函数——c++指南

前言&#xff1a;类和对象是面向对象语言的重要概念。 c身为一门既面向过程&#xff0c;又面向对象的语言。 想要学习c&#xff0c; 首先同样要先了解类和对象。 本节就类和对象的几种构造函数相关内容进行深入的解析。 目录 类和对象的基本概念 封装 类域和类体 访问限定符…

力扣235. 二叉搜索树的最近公共祖先

思路&#xff1a;要利用好二叉搜索树的特性&#xff0c;中序遍历是有序的&#xff0c;也就是说最近的公共祖先 大小一定落在区间 [p,q] 或[q,p]。 1、当p和q都大于当前root值时&#xff0c;说明当前root值太小&#xff0c;需要更大才能让它落入区间范围&#xff0c;所以要往右子…

@Insert注解是怎么用的?

苍穹外卖第二天有这段注解&#xff1a; Insert("insert into employee(name, username, password, phone, sex, id_number, create_time, update_time, create_user, update_user,status) " "values ""(#{name},#{username},#{password},#{phone},#{…

排列数字(DFS)

[Acwing 842.排列数字] 给定一个整数 n n n&#xff0c;将数字 1 ∼ n 1∼n 1∼n 排成一排&#xff0c;将会有很多种排列方法。 现在&#xff0c;请你按照字典序将所有的排列方法输出。 输入格式 共一行&#xff0c;包含一个整数 n n n 。 输出格式 按字典序输出所有排…

单词拆分-动态规划

// 单词拆分-动态规划// 输入: s "leetcode", wordDict ["leet", "code"]// 输出: true// 解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。public static boolean wordBreak(St…

如何下载安装chromium浏览器

下载安装chromium浏览器去这个网站下载&#xff1a; CNPM Binaries Mirror 参考链接&#xff1a;手写 Puppeteer&#xff1a;自动下载 Chromium - 知乎

手撸nano-gpt

nano GPT 跟着youtube上AndrejKarpathy大佬复现一个简单GPT 1.数据集准备 很小的莎士比亚数据集 wget https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt 1.1简单的tokenize 数据和等下的模型较简单&#xff0c;所以这里用了个…

解决mybatis-plus新增数据自增ID与之前数据不匹配问题

实体类的例子 Data public class User {TableId(value "id", type IdType.AUTO)private Integer id;private String username;// 忽略,不传到前端JsonIgnoreprivate String password;private String nickname;private String email;private String phone;private …

css---定位

定位 1. 相对定位1.1 如何设置相对定位&#xff1f;1.2 相对定位的参考点在哪里&#xff1f;1.3 相对定位的特点&#xff1a; 2. 绝对定位2.1 如何设置绝对定位&#xff1f;2.2 绝对定位的参考点在哪里&#xff1f;2.3 绝对定位元素的特点&#xff1a; 3. 固定定位3.1 如何设置…

PostgreSQL教程(三十六):服务器管理(十八)之回归测试

回归测试是PostgreSQL中对于 SQL 实现的一组综合测试集。它们测试标准 SQL 操作以及PostgreSQL的扩展能力。 一、运行测试 回归测试可以在一个已经安装并运行的服务器上运行&#xff0c;或者在编译树中的一个临时安装上运行。此外&#xff0c;还有运行该测试的“并行”和“顺…

游戏免费下载平台模板源码

功能介绍 此游戏网站模板源码是专门为游戏下载站而设计的&#xff0c;旨在为网站开发者提供一个高效、易于维护和扩展的解决方案。 特点&#xff1a; 响应式设计&#xff1a;我们的模板可以自适应不同设备屏幕大小&#xff0c;从而为不同平台的用户提供最佳的浏览体验。 …

算法---滑动窗口练习-1(长度最小的子数组)

长度最小的子数组 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;长度最小的子数组 2. 讲解算法原理 首先&#xff0c;定义变量n为数组nums的长度&#xff0c;sum为当前子数组的和&#xff0c;len为最短子数组的长度&#xff0c;初始值为INT_MAX&am…

javascript中的structuredClone()克隆方法

前言&#xff1a; structuredClone 是 JavaScript 的方法之一&#xff0c;用于深拷贝一个对象。它的语法是 structuredClone(obj)&#xff0c;其中 obj 是要拷贝的对象。structuredClone 方法将会创建一个与原始对象完全相同但是独立的副本。 案例&#xff1a; 当使用Web Work…

阿里巴巴按关键字搜索商品 API 返回值说明

item_search-按关键字搜索商品API测试工具 alibaba.item_search 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,…

Shadertoy内置函数系列 - mod 取模运算

mod函数返回x % 3的结果 先看一个挑战问题题目&#xff1a; Create a pattern of alternating black and red columns, with 9 columns of each color. Then, hide every third column that is colored red.The shader should avoid using branching or conditional statemen…

2024年最新阿里云和腾讯云云服务器价格租用对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…

C语言分支和循环总结

文章目录 概要结构介绍不同结构的语句简单运用小结 概要 C语言中分为三种结构&#xff1a;顺序结构&#xff0c;选择结构&#xff0c;循环结构 结构介绍 顺序结构就是从上到下&#xff0c;从左到右等等&#xff1b;选择结构可以想象是Y字路口就是到了一个地方会有不同的道路…

Redis事务为什么不支持原子性

Redis事务提供了一种将多个命令打包&#xff0c;然后按顺序执行的机制。使用MULTI命令开始事务&#xff0c;接着输入需要队列化的命令&#xff0c;最后使用EXEC命令提交整个事务。尽管Redis事务可以保证一系列命令被连续执行&#xff0c;没有其他客户端命令插入其中执行&#x…

每日OJ题_路径dp②_力扣63. 不同路径 II

目录 力扣63. 不同路径 II 解析代码 力扣63. 不同路径 II 63. 不同路径 II 难度 中等 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;…