python轻量级异步定时任务

news/2024/9/18 9:22:27/ 标签: python, java, 前端

先看一段代码:

python">from apscheduler.schedulers.background import BackgroundScheduler
import time
import logging# 设置日志记录器
logging.basicConfig()
logging.getLogger('apscheduler').setLevel(logging.DEBUG)def job_function():print("This is a scheduled job.")scheduler = BackgroundScheduler()# 添加一个每 5 分钟执行一次的任务
scheduler.add_job(job_function, 'interval', minutes=5)# 启动调度器
scheduler.start()try:# 主程序继续执行其他操作while True:print("Main program is running...")time.sleep(1)
except (KeyboardInterrupt, SystemExit):# 当主程序退出时,关闭调度器scheduler.shutdown()

这里面就是一个异步的定时任务。

其中的 apscheduler,是指:Advanced Python Scheduler

APScheduler 是一个功能强大的 Python 任务调度库,可以用于在指定的时间间隔或特定的时间点执行任务。BackgroundScheduler是 APScheduler 中的一种调度器类型,它在后台运行,不会阻塞主程序的执行。

多种触发方式

  • BackgroundScheduler支持多种触发任务的方式,包括:
    • 固定时间间隔(interval):按照固定的时间间隔执行任务。例如,每隔 5 分钟执行一次任务。
    • 特定日期时间(cron):使用类似于 Unix cron 表达式的方式来指定任务的执行时间。这允许你非常精确地控制任务的执行时间,例如每天的特定时间、每周的特定日期等。
    • 一次性执行(date):在指定的日期时间执行一次任务。

任务管理

  • BackgroundScheduler提供了丰富的任务管理功能,包括:
    • 添加任务:使用add_job方法可以向调度器中添加一个任务。你可以指定任务的执行函数、触发方式以及其他参数。
    • 暂停和恢复任务:可以使用pause_jobresume_job方法暂停和恢复特定的任务。这在需要临时停止任务执行或在特定条件下恢复任务执行时非常有用。
    • 删除任务:使用remove_job方法可以从调度器中删除一个任务。这可以在任务不再需要执行时进行清理。
  1. 错误处理

    • 如果任务执行过程中出现错误,BackgroundScheduler会捕获并记录错误信息,以便进行故障排除。
    • 可以通过设置日志记录器来记录任务执行的详细信息,包括错误信息。这有助于及时发现和解决问题。

与其他库的集成

  • BackgroundScheduler可以与其他 Python 库和框架很好地集成。例如,可以在 Flask 或 Django 等 Web 框架中使用它来执行后台任务。
  • 它还可以与数据库、消息队列等其他系统进行交互,以实现更复杂的任务调度和处理流程。

其实准确的来说,他的应用应该是这样的:

python">from apscheduler.schedulers.background import BackgroundSchedulerdef job1(bane, age):print("Job 1 executed.")def job2():print("Job 2 executed.")def my_task():print("This task runs at 10 am every day.")scheduler = BackgroundScheduler()scheduler.job1(func=run_usage, args=(None, None), id="my_job", trigger="interval", minutes=30, replace_existing=False)# 尝试添加第二个任务,与第一个任务 ID 相同
scheduler.add_job(job2, 'interval', minutes=10, id='my_job', replace_existing=True)# 设置 cron 表达式,每天上午 10 点执行任务
scheduler.add_job(my_task, trigger='cron', hour=10)scheduler.start()try:while True:pass
except (KeyboardInterrupt, SystemExit):scheduler.shutdown()

在使用BackgroundScheduler(以及 APScheduler 中的其他调度器类型)的add_job()方法时,replace_existing参数用于控制当添加一个新任务时,如果已经存在一个具有相同 ID 的任务,应该如何处理。

具体作用如下:

  • 如果replace_existing=True

    • 当尝试添加一个新任务,且新任务的 ID 与已存在任务的 ID 相同时,新任务将替换旧任务。这意味着旧任务将被停止并从调度器中移除,新任务将按照其指定的参数进行调度执行。
    • 例如,你可能在程序运行过程中需要更新某个任务的执行函数、触发方式或其他参数。通过设置这个参数为True,可以确保新的设置生效,而无需手动删除旧任务再添加新任务。
  • 如果replace_existing=False(默认值):

    • 当尝试添加一个新任务,且新任务的 ID 与已存在任务的 ID 相同时,新任务将不会被添加,并且不会对已存在的任务产生任何影响。
    • 在这种情况下,如果想要更新一个任务,需要先使用remove_job()方法手动删除旧任务,然后再添加新任务。

所以:在这个例子中,首先添加了一个任务job1,然后尝试添加一个具有相同 ID 的任务job2。当replace_existing=True时,job2将替换job1;当replace_existing=False时,job2不会被添加。


http://www.ppmy.cn/news/1524698.html

相关文章

LeetCode:240. 搜索二维矩阵 II,直接查找,详细注释

原题链接: https://leetcode.cn/problems/search-a-2d-matrix-ii/ 解题思路: 不考虑矩阵的排序特性,直接搜索整个矩阵,查找是否存在等于target的元素即可 /*** param {number[][]} matrix* param {number} target* return {boo…

springboot服务器文件读取工具类

本地文件和网络文件读取 一. SpringBoot的RestTemplate配置 RestTemplate 二. 文件读取 RangeEntity 分片下载的封装对象 package com.zzc.component.download;import com.zzc.common.utils.StrUtils; import lombok.Data;import javax.servlet.http.HttpServletResponse;…

微信小程序-文件下载

整体思路: wx.getSetting:获取用户授权。 wx.downloadFile:下载文件资源到本地,客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径 (本地路径),单次下载允许的最大文件为 200MB。 wx.saveImageTo…

Android 13 固定systemUI的状态栏为黑底白字,不能被系统应用或者三方应用修改

目录 一.背景 二.思路 三.代码流程 1.colos.xml自定义颜色 2.设置状态栏的背景颜色 3.对View进行操作 ①.对Clock(状态栏左侧的数字时钟)进行操作 ②.对电池(BatteryMeterView)进行操作 4.锁屏状态栏 5.patch汇总 一.背景 客户需求将状态栏固定成黑底白字,并且不能让系…

【HCIA】笔记汇总

IP路由基础 路由表: 分为三种: IP路由表/全局路由表/核心路由表。(RIB表)(指导部分协议报文)记录着目的网络、掩码、出接口、下一跳通过静态、直连、动态路由协议生成的。比如说三台设备相连,其中直连设备会直接生成路由表项。其它的路由表项根据优先级和开销值来选举,…

【应用笔记】Cot Menu 轻量级多级菜单控制框架程序(C语言)

【应用笔记】Cot Menu 轻量级多级菜单控制框架程序(C语言) 前言: 工作需要, 实现一个串口打印的类shell菜单. 如果按照以往的习惯我会自己重新"构思"(狗屎)一个菜单框架.之前用oled和lcd时,我都从零重复造轮子. 作为一个成熟的程序员, 应该要学…

【大数据算法】一文掌握大数据算法之:空间亚线性算法。

空间亚线性算法 1、空间亚线性算法1.1 定义1.2 核心原理1.2.1 数据流模型1.2.2 随机化技术1.2.3 哈希技术 1.3 应用场景1.4 算法公式1.5 代码示例 2、总结 1、空间亚线性算法 1.1 定义 空间亚线性算法是指在处理大数据时,其所需的空间复杂度小于输入数据规模的线性…

Linux 删除 当前下的 mysql-8.0.31 空文件夹

在Linux中,如果你想要删除当前目录下的名为mysql-8.0.31的空文件夹(即该文件夹内没有任何文件或子文件夹),你可以使用rmdir命令。但是,如果mysql-8.0.31文件夹并非完全为空(即它包含文件或子文件夹&#xf…

创建一个Oracle版本的JDK的Docker镜像

背景说明 OpenJDK 和Oracle JDK 一般情况下我们选择OpenJDK,两者针对大部分场景都可以满足,有些地方例如反射技术获得某些包路径下的类对象等,有时候选择OpenJDK会导致空指针异常。 两者在底层实现方面有部分区别。 创建镜像 这里是Linux…

学生请假管理系统

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 学生请假管理系统拥有两种角色 管理员:班级管理、课程管理、学生管理、审核请假信息、导出请假单 学生:填写请假单、查看请假审核情况 1.1 背景描述 学生请假管…

centos/kali 操作不同(两处)

二进制包安装 centos7: rpm包 rpm -ivhkali: deban包 dpkg -i deb包 网络镜像源配置 centos7: 配置文件路径 /etc/yum.repos.d 配置镜像源,会生成 .repo为后缀的文件,文件内容格式: [后缀.repo四部----------------…

bug是什么意思

“Bug” 是指计算机程序或系统中的错误或缺陷,导致程序运行时产生意外行为、结果不正确或崩溃。 Bug的来源 “Bug”一词源于1940年代,当时的计算机是大型机械设备,某些问题是由于昆虫(Bug)进入机器导致的故障。虽然这…

讨论:无法访问不同网段的Kafka问题

问题 X同学:A网段的机器,访问B网段部署的Kafka集群,中间做了网络映射,映射成A网段可以访问的IP地址,A网段程序里配置bootstrap.servers就是这些可以访问的地址。但是最后发现还是无法访问,并且日志里看到了…

Golang | Leetcode Golang题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; func isSubsequence(s string, t string) bool {n, m : len(s), len(t)f : make([][26]int, m 1)for i : 0; i < 26; i {f[m][i] m}for i : m - 1; i > 0; i-- {for j : 0; j < 26; j {if t[i] byte(j a) {f[i][j] i} else {…

find_package命令的搜索顺序

find_package命令在CMake中有两种模式:模块模式(Module mode)和配置模式(Config mode)。这两种模式的搜索顺序如下: 模块模式: 首先,CMake会在CMAKE_MODULE_PATH变量指定的目录中搜索名为Find<PackageName>.cmake的文件。如果没有找到,CMake会在其自带的模块目录…

如何快速练习键盘盲打

盲打是指在不看键盘的情况下进行打字&#xff0c;这样可以显著提高打字速度和效率。以下是一些练习盲打的方法&#xff1a; 熟悉键盘布局&#xff1a;首先&#xff0c;你需要熟悉键盘上的字母和符号的位置。可以通过键盘图或者键盘贴纸来帮助记忆。 使用在线打字练习工具&…

为工程师构建生成式 AI 应用程序

作为全栈工程师&#xff0c;我们经常需要将后端和前端代码与 AI 模型集成。然而&#xff0c;访问这些模型一直是一项重大挑战。主要障碍之一是缺乏对开放和封闭模型的轻松访问。在 GitHub&#xff0c;我们正在打破访问障碍并推出GitHub Models。让您&#xff08;开发人员&#…

【mysql】mysql之优化

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

个人学习笔记7-3:动手学深度学习pytorch版-李沐

#深度学习# #人工智能# #神经网络# #计算机视觉# #python# 计算机视觉 13.7 单发多框检测&#xff08;SSD&#xff09; SSD模型主要由基础网络组成&#xff0c;其后是几个多尺度特征块。 SSD通过单神经网络来检测模型&#xff0c;以每个像素为中心的产生多个锚框&#xff0c…

HarmonyOS开发实战( Beta5.0)系统提供的接口实践规范

简介 在应用开发中&#xff0c;经常会调用系统提供的接口&#xff0c;比如读取本地文件、处理服务端数据等等。若对接口使用不合理&#xff0c;可能引起延迟、卡顿、丢帧等性能问题。本文以如下系统提供的接口为例&#xff0c;总结了使用中的注意事项。 ResourceManager的get…