flask-apscheduler实现定时任务
秋风阁-北溪入江流
flask-apscheduler是一个支持apscheduler的flask插件,通过flask-apscheduler可以很方便的定义定时任务。
安装flask-apscheduler
pip install flask-apscheduler
flask-apscheduler组件
apscheduler库包含有组件:
- triggers(触发器)
- job stores(作业存储)
- executors(执行者)
- schedulers(调度程序)
triggers触发器
在apscheduler中将一个定时任务称为job作业,在设置job时,需要为其选择特点的触发器。
触发器:确定作业运行时计算日期/时间的逻辑。
在apscheduler中具有以下三种内置的触发器类型:
- date: 期望在某个时间点运行一次作业时使用该触发器
- run_date: 运行作业的日期/时间,为空则使用当前时间
- timezone: 时区
- interval: 期望以固定的时间间隔运行作业时使用该触发器
- weeks: 间隔的周数
- days: 间隔的天数
- hours: 间隔的小时数
- minutes: 间隔的分钟数
- seconds: 间隔的秒数
- start_date: 间隔计算的起点。若指定则成指定时间开始,否则以当前时间开始。
- end_date: 最晚可能触发的日期/时间
- timezone: 时区
- jitter: 最多延迟几秒执行
- cron: 当想在特定时间定期运行作业时使用该触发器
- year: 4位数年份
- month: 月
- day: 一个月中的某一天天
- week: ISO周(1~31)
- day_of_week: 工作日的数字或者名称(0~6或mon, tue, wed, thu, fri, sat, sun)
- hour: 小时
- minute: 分钟
- second: 秒
- start_date: 最早可能的触发时间。若指定则成指定时间开始,否则以当前时间开始。
- end_date: 最晚可能触发的日期/时间
- timezone: 时区
- jitter: 最多延迟几秒执行
flask-apscheduler的使用
参数配置
特定于flask-apscheduler的配置选项
# 是否开启api查看定时任务的配置
# 设置为True后,可以通过SCHEDULER_API_PREFIX接口访问定时任务配置界面
SCHEDULER_API_ENABLED: bool (default: False)
# 设置访问查看定时任务配置的api接口
SCHEDULER_API_PREFIX: str (default: "/scheduler")
# 调度程序endpoint前缀
SCHEDULER_ENDPOINT_PREFIX: str (default: "scheduler.")
# 允许访问调度器的主机
SCHEDULER_ALLOWED_HOSTS: list (default: ["*"])
在测试定时任务时,建议将SCHEDULER_API_ENABLED设置为True,方便前端查看定时任务。
若开启api后访问接口后端报错KeyError: 'JSONIFY_PRETTYPRINT_REGULAR',可在配置中添加布尔类型的JSONIFY_PRETTYPRINT_REGULAR,值设置为True或False都可以,设置为True仅会在前端界面以更美观的方式显示内容。
适用于apscheduler的配置选项
# 持久化配置
SCHEDULER_JOBSTORES: dict
# 执行器,线程池配置
SCHEDULER_EXECUTORS: dict
# 作业默认值配置
SCHEDULER_JOB_DEFAULTS: dict
# 时区设置
SCHEDULER_TIMEZONE: dict
定时任务设置方法
配置项设置定时任务
flask-apscheduler的定时任务在配置项中设置,通过字典保存作业的相关信息,多个作业时,在列表中进行作业的存储。
class SchedulerConfig:JSONIFY_PRETTYPRINT_REGULAR = TrueSCHEDULER_API_ENABLED = TrueJOBS = [{'id': 'job1',# func通过`模块名:方法名`的方式进行设置'func': 'run:add','args': (1, 2),'trigger': 'interval','seconds': 3}]
配置项设置的优点是配置麻烦,不直观,但是方便对定时任务进行统一管理
装饰器设置定时任务
在装饰器中设置定时任务,简单方便。
@scheduler.task('interval', id='job1', args=(1, 2), seconds=3)
def add(a, b):print(a + b)
完整示例与定时任务的启动
定时任务的执行需要先初始化一个执行程序,添加好配置和作业后,通过start()方法启动定时任务。
完整示例(以装饰器的方式为例)
import timefrom flask import Flask
from flask_apscheduler import APSchedulerapp = Flask(__name__)scheduler = APScheduler()start = time.time()@scheduler.task('interval', id='job1', seconds=3)
def print_interval():global startprint(f"间隔时间:{round(time.time() - start)}")start = time.time()class Config:JSONIFY_PRETTYPRINT_REGULAR = TrueSCHEDULER_API_ENABLED = Trueapp.config.from_object(Config)scheduler.init_app(app)print(scheduler.api_enabled)
scheduler.start()if __name__ == '__main__':app.run()
示例的执行结果如下所示:
间隔时间:3
间隔时间:3
间隔时间:3
...
可以看到每3秒进行了一次打印操作,完美的执行了期望的要求。
api查看
访问${SCHEDULER_API_PREFIX}/jobs接口:
[{"id": "job1","name": "print_interval","func": "__main__:print_interval","args": [],"kwargs": {},"trigger": "interval","start_date": "2023-07-11T12:09:49.057865+08:00","seconds": 3,"misfire_grace_time": 1,"max_instances": 1,"next_run_time": "2023-07-11T12:11:31.057865+08:00"}
]
相关文章:
flask-apscheduler实现定时任务
秋风阁-北溪入江流 flask-apscheduler是一个支持apscheduler的flask插件,通过flask-apscheduler可以很方便的定义定时任务。 安装flask-apscheduler pip install flask-apschedulerflask-apscheduler组件 apscheduler库包含有组件: triggers…...
FPGA纯verilog实现UDP协议栈,sgmii接口SFP光口收发,提供工程源码和技术支持
目录 1、前言2、我这里已有的UDP方案3、该UDP协议栈性能4、详细设计方案SFPGMII AXIS接口模块AXIS FIFOUDP协议栈1G/2.5G Ethernet PCS/PMA or SGMII 5、vivado工程详解6、上板调试验证并演示准备工作查看ARPUDP数据回环测试 7、福利:工程代码的获取 1、前言 目前网…...
【Python入门系列】第十五篇:Python数据可视化和图表绘制
文章目录 前言一、可视化与绘图常用库二、Matplotlib1、折线图2、散点图3、柱状图: 三、Seaborn1、散点图2、箱线图3、小提琴图4、热力图 四、Plotly1、折线图2、散点图3、条形图 总结 前言 数据可视化是数据分析和数据科学中非常重要的一部分。通过可视化…...
isBlank函数和isEmpty函数的区别
StrUtil.isBlank(CharSequence):该方法用于判断字符串是否为空或仅包含空白字符。如果传入的字符串为null、空字符串(“”)或仅包含空白字符(如空格、制表符、换行符等),则返回true;否则返回false。 StrUtil.isEmpty(…...
「SQL面试题库」 No_121 The Most Recent Three Orders
🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试࿰…...
【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 7 日论文合集)
文章目录 一、检测相关(5篇)1.1 Contextual Affinity Distillation for Image Anomaly Detection1.2 Noise-to-Norm Reconstruction for Industrial Anomaly Detection and Localization1.3 MMNet: Multi-Collaboration and Multi-Supervision Network for Sequential Deepfake…...
直流运算放大器-----仪表放大器(三)
详见 模拟电子技术基础 6.4.1 电路图 计算公式 仿真 电流流向...
【Zookeeper】终端操作常用命令
文章目录 服务端常用命令客户端常用命令 zookeeper版本3.7.1 Zookeeper是一个开源的分布式协调服务。 Zookeeper是Apache软件基金会的一个项目,它提供了分布式应用程序协调的通用服务,如分布式同步、命名服务、集群维护等,以简化分布式应用协…...
leetcode 1110. 删点成林
给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组织答案…...
华为Harmony应用开发初探
HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体…...
电脑应用程序发生异常怎么办?
有时候我们打开电脑上面的某个软件时,会打不开,并且会弹出如下的错误提示“应用程序发生异常 未知的软件异常(xxx),位置为xx”。相信大多数的人在使用电脑的时…...
【JAVA】准备工作------Java开发环境搭建,IDEA的基础设置与操作
🍉内容专栏:【JAVA】 🍉本文脉络:JAVA的准备工作,IDEA的安装以及基础设置和快捷操作 🍉本文作者:Melon西西 🍉发布时间 :2023.7.11 目录 1. 概述JDK、JRE 2. 第一个程序——创建…...
操作系统真象还原——第5章 保护模式进阶,向内核迈进
第5章 保护模式进阶,向内核迈进 BIOS中断利用0x15子功能0xe802获取内存 汇编语言子功能的调用 填写调用前相关寄存器进行int中断调用获取返回结果输出到对应寄存器的值 80286 拥有24 位地址线,其寻址空间是16MB 。有一些ISA 只使用15MB,剩下…...
设计一款助听器可能需要用到以下音频算法
设计一款助听器可能需要用到以下音频算法: 1 响度补偿算法:助听器可能需要根据用户的听力损失情况调整不同频率范围内的增益,以提供个性化的听力补偿。这可以通过基于用户配置或自适应算法的频率响应调整来实现。 2 噪声抑制:用于…...
【端午节】用Vue3写粽子——从零开始
前言 在端午节即将到来之际,我们来一起写一个粽子组件来庆祝这个传统节日。 准备工作 首先,我们需要安装Vue3及其相关依赖,这里使用Vue CLI来创建项目。 # 安装Vue CLI npm install -g vue/cli # 创建Vue3项目 vue create zongzi接下来&a…...
大象机器人人工智能套装2023版深度学习协作机器人、先进机器视觉与应用场景
引言: 介绍当前的版本 今天我们要介绍的是aikit2023,aikit2023是aikit的全新升级版。 AIkit 2023 是一套集视觉,定位抓取、自动分拣模块为一体的入门级人工智能套装。 该套装基于python平台,可通过开发软件实现机械臂的控制&am…...
Cesium Token申请
一、什么是Cesium ion? Cesium ion是一个提供瓦片图和3D地理空间数据的平台,支持把数据添加到用户自己的应用程序中。 二、为什么需要access token? 使用Cesium ion需要申请access token,当用户将数据添加到自己的账户后,便可以…...
ubuntu系统自带的Text Editor编辑器不高亮解决办法
平时在写launch文件时,我喜欢用ubuntu系统自带的text编辑器,但发现使用text打开launch 文件时,没有高亮功能了,如下图所示: 解决办法非常简单,因为launch和xml文件语法规则类似,只需将text编辑…...
Docker NGINX 加载Geoip模板
前提环境: Docker 环境 涉及参考文档: ngx_http_geoip_module 模块Loki NGINX Service MeshGeoIP IP库 一、下载GeoIP IP库 二、配置Nginx主配置文件 vim /data/nginx/MangoMoh/dos/nginx.confuser nginx; worker_processes auto;error_log /var…...
springboot基于协同过滤算法商品推荐系统
开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器&…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
