测试平台系列(72) 了解ApScheduler基本用法
大家好~我是
米洛
!
我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程
,希望大家多多支持。
欢迎关注我的公众号测试开发坑货
,获取最新文章教程!
回顾
上一节我们调研了一下市面上的定时任务方案,最终确定为APScheduler
,但据说在uvicorn
下还有一些坑。
没关系,笔者也是在摸索阶段。如果有遇到问题,解决了也可以给大家参考。
这篇主要给大家介绍一下APScheduler的基本信息和使用方法。
四个名词
- 触发器: 定时任务什么时候触发
- 工作商店: 定时任务存在哪里,内存?MySQL?Redis?
- 执行器: 执行任务的程序
- 调度程序: 不同任务之间的调度管理程序,还包括任务的添加和修改等
存储介质
在上一节我们提到了定时任务持久化。
那么在APScheduler中支持哪些存储介质
呢?看一张图:
可以看到,它支持多种介质,包括我们最不愿意用的memory(内存)
。因为如果服务重启,数据就都没了,所以我们不考虑使用这个。
SQLAlchemy
这是我们常用的方法,通过它可以写入到mysql,在不引入其他组件的情况下完全可以考虑。
MongoDB
NoSQL的一种,比较方便,我们
秉着不额外增加组件
的信念,暂不考虑。Redis
redis后续我们自身服务也需要用到,但把它作为一个"数据库"来使用,还得考虑redis备份等情况,当然优点就是会比mysql更快。
至于其他的zk,rethinkdb,由于我们暂时也不会引用,所以不分析了。
综合而言,还是用SQLAlchemy
代价最小
,成本最低。
运行模式
在运行demo的过程中,发现APScheduler很强大,可以支持各种并发模式。
由于我们是异步Asycio,所以我们选择第三种执行器。其他的包括Gevent
等也是Flask/Django等框架的好选择。
了解基本API
- 配置scheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.schedulers.asyncio import AsyncIOScheduler
# 选择job存储介质为sqlalchemy
job_store = {
'default': SQLAlchemyJobStore(url=Config.SQLALCHEMY_DATABASE_URI)
}
# 选择调度程序为AsyncIOScheduler
scheduler = AsyncIOScheduler()
# 配置好对应的程序
scheduler.configure(jobstores=job_store)
# 启动
scheduler.start()
- 添加job
# 把方法: myfunc添加到定时任务,每2分钟执行一次
scheduler.add_job(myfunc, 'interval', minutes=2, id='my_job_id')
与pity结合
在FastApi中,有个startup的钩子方法,意味着当服务启动的时候会自动执行该方法。我们来看看怎么用的:
@pity.on_event意思是监听事件
,后面的参数: "startup"代表pity服务启动。
也就是说,当pity启动的时候,则初始化
Scheduler。
这里我封装了一个Scheduler类,后面会给大家介绍里面的具体方法。
下一节我们编写测试计划
相关接口,并与APScheduler结合起来,完成一整套定时任务功能。
测试平台系列(72) 了解ApScheduler基本用法的更多相关文章
- 测试平台系列(82) 解决APScheduler重复执行的问题
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们编写了在线执行R ...
- 测试平台系列(85) 把redis运用到实战中
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们让支持了前置条件 ...
- 测试平台系列(71) Python定时任务方案
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 定时任务 定时任务,顾名思义: ...
- 测试平台系列(81) 编写在线执行Redis功能
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们牛刀小试,编写了 ...
- 测试平台系列(83) 前置条件支持Redis语句
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上节我们打了个野,解决了一 ...
- 测试平台系列(95) 前置条件支持简单的python脚本
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们构思了一下怎么去支 ...
- 测试平台系列(1) 搭建Flask服务
搭建Flask服务 项目地址 点我进入项目地址 代码都会在这里有所展示,喜欢的话可以帮点个star,谢谢大家了!如果你喜欢该教程,也可以分享给其他人. 关于选型 想了很久,本来打算用「Gin」做为后端 ...
- 测试平台系列(79) 编写Redis配置功能(下)
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们提出了优化Dao ...
- 测试平台系列(80) 封装Redis客户端
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们编写了Redis ...
随机推荐
- [手机编程]Aid Learning--换源+数据库安装
换源+MYSQL安装 Aid Learning下载安装 http://www.aidlearning.net/ 切换源 打开Terminal复制回车即可 cd /etc/apt/&& ...
- phpQuery
以下资料均来自官方文档,官方文档地址:https://code.google.com/archive/p/phpquery/wikis 基础 示例 phpQuery::newDocumentFileX ...
- vue 改变路由参数
更改路由传递的参数: const query = JSON.parse(JSON.stringify(this.$route.query)) // 获取路由参数信息 query.id = Name / ...
- sonar入门
一.Sonar是什么? 根据我的了解,可以说Sonar包含三个部分: SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码味道.它可以与您现有的工作流程集成,以实现跨项目分支和提 ...
- HDFS 10 - HDFS 的联邦机制(Federation 机制)
目录 1 - 为什么需要联邦 2 - Federation 架构设计 3 HDFS Federation 的不足 版权声明 1 - 为什么需要联邦 单 NameNode 的架构存在的问题:当集群中数据 ...
- 1.JDBC编程六步走以及实现案例
1.注册驱动:通知Java程序我们要连接的是哪个品牌的数据库 2.获取数据库连接:Java进程和Mysql进程之间的通道开启了 3.获取数据库操作对象:这个对象是用来执行sql语句的 4.执行SQL语 ...
- 多图详解万星 Restful 框架原理与实现
rest框架概览 我们先通过 go-zero 自带的命令行工具 goctl 来生成一个 api service,其 main 函数如下: func main() { flag.Parse() var ...
- Rafy 框架 - 实体支持只更新部分变更的字段
Rafy 快一两年没有大的更新了.并不是这个框架没人维护了.相反,主要是因为自己的项目.以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加.但是最近因为外面使用了 Rafy 的几个公司,找到我 ...
- 超详细的Eureka源码解析
Eureka简介 Eureka是什么? Eureka是基于REST(Representational State Transfer)服务,主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移 ...
- 洛谷5038 [SCOI2012]奇怪的游戏(二分+网络流+判断奇偶)
寒假的时候就听过这个题.但是一直没有写. qwq 首先,我们发现题目中的图是个网格图,然后每次可以将相邻两个格子加一. 很容易就想到是黑白染色.那么每次操作,就相当于同时操作一个白点,一个黑点. 我们 ...