Django+vue自动化测试平台(25)-- 自动化测试之封装APscheduler定时任务框架

APscheduler简介

APscheduler全称Advanced Python Scheduler,作用为在指定的时间规则执行指定的作业,其是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。基于这些功能,我们可以很方便的实现一个python定时任务系统。

组成部分说明

# 触发器(trigger):
包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。
除了他们自己初始配置意外,触发器完全是无状态的。# 作业存储(job store):
存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。
一个作业的数据讲在保存在持久化作业存储时被序列化,并在加载时被反序列化。
调度器不能分享同一个作业存储。# 执行器(executor):
处理作业的运行,他们通常通过在作业中提交制定的可调用对象到一个线程或者进城池来进行。
当作业完成时,执行器将会通知调度器。# 调度器(scheduler):
通常在应用只有一个调度器,应用的开发者通常不会直接处理作业存储、调度器和触发器,相反,调度器提供了处理这些的合适的接口。
配置作业存储和执行器可以在调度器中完成,例如添加、修改和移除作业。 

框架对比:Celery VS APScheduler:

celery:

celery是一个专注于实时处理和任务调度的任务队列,任务就是消息(消息队列使用rabbitmq或者redie),消息中的有效载荷中包含要执行任务的全部数据。我们通常将celery作为一个任务队列来使用,但是celery也有定时任务的功能,但是celery无法在flask这样的系统中动态的添加定时任务,而且单独为定时任务功能而搭建celery显得过于重量级。

apscheduler:

apscheduler是基于Quartz的一个Python定时任务框架,提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化作业。APScheduler算是在实际项目中最好用的一个工具库,不仅可以在程序中动态的添加和删除定时任务,还支持持久化。

函数封装:

# 自定义调用函数
def scheduler_function(request):try:scheduler_id= "示例:123"scheduler_type = "示例:1"task_time = "示例:2024-01-01 00:00:00"task_hour= "示例:1"task_week_days= "示例:mon"task_week_times= "示例:22:00"data= "函数传参"# 示例:创建定时任务,可自主定义传参add_scheduler_task(scheduler_type, scheduler_id, task_time, task_hour, task_week_days, task_week_times, data)except Exception as e:return False, f"创建定时任务失败,原因是:{str(e)}"
# 添加定时任务
def add_scheduler_task(scheduler_type, scheduler_id, task_time, task_hour, task_week_days, task_week_times, data):try:scheduler = BackgroundScheduler()scheduler.add_jobstore(DjangoJobStore(), 'default')if scheduler_type == 1:# 某个时刻执行scheduler.add_job(run_task,'date', id=str(scheduler_id),run_date=task_time, args=(data,))scheduler.start()elif scheduler_type == 2:# 间隔时间性执行scheduler.add_job(run_task,'interval', id=str(scheduler_id), minutes=task_hour, args=(data,))scheduler.start()elif scheduler_type == 3:# 每周几点执行start_time = task_week_times.split(':')h = int(start_time[0])m = int(start_time[1])scheduler.add_job(run_task, 'cron', id=str(scheduler_id),day_of_week=task_week_days, hour=h, minute=m,args=(data,))scheduler.start()return True, "创建定时任务成功"except Exception as e:return False, f"创建定时任务失败,原因是:{str(e)}"# 删除定时任务
def remove_scheduler(scheduler_id):try:scheduler = BackgroundScheduler()scheduler.add_jobstore(DjangoJobStore(), 'default')DjangoJob.objects.filter(id=str(scheduler_id)).delete()return True, "删除定时任务成功"except Exception as e:return False, f"删除定时任务失败,原因是:{str(e)}"# 获取定时任务,判断是否存在,若有,则返回下一次执行的时间
def get_scheduler(scheduler_id):try:job = DjangoJob.objects.filter(id=str(scheduler_id)).values().first()if job:return True, job["next_run_time"]else:return False, ""except Exception as e:return False, f"查询定时任务列表失败,原因:{str(e)}"

总结:

以上封装的函数可以解决绝大部分所需要的定时任务类型,分别是单次执行,间隔执行,周期性执行,满足绝大多数的自动化测试使用,注:个人愚见,仅供参考!!!

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

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

相关文章

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片 1 目标效果视频 CamManager 2 CamManager读取本地文件时序 3 BD_Vision_Utility添加代码 3.0 导入链接库 BD_OperatorSets.dllSystem.Windows.Forms.dllOpencvSharp 3.1 导入VisionParam中创建的文件Util_FileO…

安防监控/视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是什么原因?

安防监控EasyCVR视频汇聚平台可提供多协议(RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK)的设备接入、音视频采集、视频转码、处理、分发等服务,系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

旅游计划定制小程序网页模板源码

手机在线旅游定制服务,定制旅游出行app小程序模板。包含:定制介绍、定制表单填写、我的订单等。 旅游计划定制小程序网页模板源码

C++ STL 文件系统用法介绍

目录 一. 获取当前工作目录 二:设置和读取文件写入时间 三:获取文件目录大小 四:获取文件类型信息 一. 获取当前工作目录 #include <filesystem> #include <iostream> #include <fstream> namespace fs = std::filesystem;int main() {std::cout &l…

交换机接口三种模式Access、Trunk、Hybrid

交换机接口的三种模式 1.access接口模式&#xff08;接入链路&#xff0c;接入模式&#xff09; 接收数据&#xff1a;当接收到一个无标记帧的时候&#xff0c;打上自己的PVid并接受&#xff08;就是自己的vlan标签&#xff09;。当接收到一个有标记帧的时候&#xff0c;对比…

swiftui中NavigationStack布局navigationBarTitleDisplayMode作用,以及内容顶部空白区域解决办法

写了一个小demo用于学习NavigationStack和toolbar/ToolbarItem知识&#xff0c;但是在写一个瀑布流布局的时候&#xff0c;设置了顶部的toolbar&#xff0c;然后内容区域的顶部出现了一大片空白区域&#xff0c;这样的效果并不是很美观很好看&#xff0c;所以就想着研究解决一下…

科普文:一文搞懂SpringBoot(狂神说Java)

1、Hello,World&#xff01; 1.1、SpringBoot简介 回顾什么是Spring Spring是一个开源框架&#xff0c;2003 年兴起的一个轻量级的Java 开发框架&#xff0c;作者&#xff1a;Rod Johnson 。 Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发。 Spring是…

clickhouse学习笔记(五)SQL操作

目录 一、增 二、删改 三、查询以及各种子句 1、with子句 a、表达式为常量 b、表达式为函数调用 c、表达式为子查询 2、from子句 3、array join子句 a、INNER ARRAY JOIN b、LEFT ARRAY JOIN c、数组的一些函数 groupArray groupUniqArray arrayFlatten splitBy…

Java 如何在volatile内部调用接口

在Java中&#xff0c;volatile 关键字通常用于确保变量的可见性和有序性&#xff0c;而不是用来修饰接口或方法调用的。volatile 修饰的变量会被立即同步到主存&#xff0c;并且在每次访问时都会从主存中重新读取&#xff0c;而不是从缓存中读取。这意味着对volatile变量的修改…

2005-2023年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(无缺失)

2005-2023年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;2005-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、范围&#xff1a;31省 4、指标&#xff1a;全体居民人均消费支出、城镇居…

探索 Linux 的 /etc/hosts 文件:基础知识与实用指南

探索 Linux 的 /etc/hosts 文件&#xff1a;基础知识与实用指南 在 Linux 和 Unix 系统中&#xff0c;/etc/hosts 文件扮演着一个至关重要的角色。它是系统的本地 DNS&#xff08;域名系统&#xff09;解析器&#xff0c;负责将主机名映射到 IP 地址。在网络和系统管理中&…

Linux中软件yum安装与编译安装

yum安装与编译安装是Linux系统中常见的两种软件安装方式&#xff0c;它们在多个方面存在显著的区别。以下是对这两种安装方式的详细比较&#xff1a; yum安装 定义与特点&#xff1a; 定义&#xff1a;YUM&#xff08;Yellow dog Updater, Modified&#xff09;是Linux类系统…

Windows netstat命令详解,Windows查看网络连接

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 netstat 常用来…

rocketmq实现限流

目录 问题背景 技术方向 方案确认 消息队列&#xff08;√&#xff09; 分布式锁&#xff08;&#xff09; 方案实现 监控方向 业务方向 问题背景 公司邮件服务token有 分钟内超200封的熔断机制&#xff0c;当前token被熔断后&#xff0c;系统发邮件操作会被忽略&…

python中的原子操作简介

深入理解Python中的原子操作 在现代编程中&#xff0c;多线程是提高程序执行效率的常用技术。然而&#xff0c;当多个线程并发执行时&#xff0c;如何确保数据的一致性和操作的正确性成为了一个关键问题。原子操作&#xff08;Atomic Operation&#xff09;便是解决这一问题的…

责任链模式(大话设计模式)C/C++版本

责任链模式 C #include <iostream> #include <memory>using namespace std; // 请求类 struct Request {std::string requestType; // 请求类型int number; // 该请求类型的数量std::string requestContent; // 请求内容 };// 抽象经理类 clas…

MySQL学习记录 —— 십칠 CentOS7.9环境下的MySQL8.4 安装和配置

文章目录 1、安装和配置2、MySQL 包位置3、主要程序介绍 本篇开始在之前mysql博客的基础上继续延伸&#xff0c;适合有一定基础的mysql使用者阅读 环境 &#xff1a;CentOS 7.9 root 用户&#xff0c;MySQL 8.4 1、安装和配置 看一下当前系统版本 cat /etc/redhat-release应当…

前端重点之:Vue+websocket通信详细用法和websocket心跳机制的使用,websocket断开实时监测,websocket实时通信

今年年初找工作,好多gou面试官总喜欢问关于websocket通信的使用方式,此次又用到了,在此做个总结:主要包含websocket的具体使用方法,和重点:(心跳机制的使用),就是主要是前端实时监测websocket是否有断连和数据的处理 在前端开发中,WebSocket 是一种常见的技术,用于…

浅谈序列化及文本格式

序列化及文本格式 需求背景 软件项目在开发过程中&#xff0c;将大量初始化配置项在一定程度上保存在配置文件中。肯定有很多人有疑问&#xff0c;为什么不将这些信息放在软件内存中。开机时与用户交互进行确认&#xff1f;这肯定是一个好想法&#xff0c;但是如果配置太多或…

众所周知沃尔玛1P是怎么运营?

​​沃尔玛的1P模式&#xff0c;即第一方供应商模式&#xff0c;是其独特的采购策略。在这种模式下&#xff0c;供应商先将商品卖给沃尔玛&#xff0c;由沃尔玛负责库存管理和销售。沃尔玛通过强大的采购和物流能力控制库存&#xff0c;确保商品品质&#xff0c;为客户提供更加…