如何在 FastAPI 中设置定时任务:完全指南

Web 应用程序开发中,及时高效处理常规任务至关重要,包括定时收集数据或管理任务计划。针对强大且性能卓越的 FastAPI 框架,我们可以通过几种策略来管理这些必要的定时任务。

image.png

实现 FastAPI 中的定时任务

本指南将探讨在 FastAPI 环境中管理定时任务的三种实用方法:使用 APScheduler,利用 Celery 任务队列的力量,以及利用内置的 asyncio 进行调度。

1. 利用 APScheduler

APScheduler 是 Python 调度库,以其灵活性和易于集成而著称。以下是如何在 FastAPI 中使用它:

安装
pip install APScheduler
集成与初始化
from apscheduler.schedulers.background import BackgroundSchedulerscheduler = BackgroundScheduler()
定义定时函数
def tick():print('Tick! The time is: %s' % datetime.now()) 
在 FastAPI 初始化后启动 APScheduler
from fastapi import FastAPIapp = FastAPI()@app.on_event("startup")
async def app_start():scheduler.add_job(execute_periodic_function, 'interval', seconds=3)scheduler.start()

2. 使用 Celery

Celery 是一个高效的分布式任务队列系统,可与 FastAPI 无缝集成。

设置 Celery
pip install celery
定义 Celery 应用与任务
from celery import Celerycelery_app = Celery('my_fastapi_app')@celery_app.task
def celery_periodic_task():print('执行了 Celery 任务')
在 FastAPI 启动时安排任务
from celery.schedules import crontab@app.on_event("startup")
async def app_start():celery_app.conf.beat_schedule = {'每半分钟执行': {'task': 'celery_periodic_task','schedule': 30.0,},}

3. 使用 Asyncio 进行定时任务

Python 的原生异步库 asyncio 也可用于调度定时任务。

Asyncio 定时任务示例
import asyncio@app.on_event("startup")
async def app_start():asyncio.create_task(async_cron())async def async_cron():while True:print('执行 Async 定时任务')await asyncio.sleep(10)
实践示例:使用 APScheduler

以下是完整的使用 APScheduler 管理定时任务的 FastAPI 应用示例:

from fastapi import FastAPI
from datetime import datetime
from apscheduler.schedulers.background import BackgroundSchedulerapp = FastAPI()
scheduler = BackgroundScheduler()def periodic_function():print(f'定时执行的操作时间:{datetime.now()}')@app.on_event("startup")
async def app_start():scheduler.add_job(periodic_function, 'interval', seconds=3)scheduler.start()@app.get("/")
async def welcome():return {"message": "欢迎访问定时任务演示"}if __name__ == "__main__":import uvicornuvicorn.run(app, host="127.0.0.1", port=8000)
提示、技巧及注意事项
  • 使用 Celery 时,请确保已安装并配置 Redis(或其他消息代理)。
  • 注意任务执行时长,避免对应用性能产生负面影响。
  • 使用 try-except 模块处理定时任务中的异常,并执行适当的错误处理。

使用 Apifox 这样的工具可以简化 API 测试,这是 Postman 等竞品的更强大的替代品。Apifox 将 Postman、Swagger、Mock 和 JMeter 的功能整合在一起,简化了对各种协议 API 的调试,提高了项目投产效率。

结论

无论选择 APScheduler、Celery 还是 asyncio,FastAPI 都为实现定时任务提供了强大的解决方案。每种方法都有其优点,APScheduler 使用友好,asyncio 与 FastAPI 的异步特性相契合。根据您的具体需求和场景选择最合适的方法。

知识扩展:

  • FastAPI 中的 depends 怎么使用?FastAPI 中 depends 的使用方法
  • FastAPI 中怎么进行鉴权?在 FastAPI 中鉴权的方法

参考链接:

  • APScheduler Documentation: https://apscheduler.readthedocs.io/en/latest/index.html
  • Celery Documentation: https://docs.celeryq.dev/en/stable/index.html
  • asyncio Documentation: https://docs.python.org/3/library/asyncio.html

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

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

相关文章

工业6轴机械臂运动学逆解(解析解)

工业6轴机械臂运动学逆解(解析解) 通常工业机械臂采用6旋转轴串连的形式,保证了灵活性,但为其运动学逆解(即已知机械臂末端的位姿 P P P,求机械臂各个旋转轴的旋转角)带来了较大的困难&#xff…

面试题总结(十五)【ARMstm32】【华清远见西安中心】

ARM Cortex-M,Cortex-R,Cortex-A的区别和差异是什么? ARM Cortex-M,Cortex-R和Cortex-A是ARM架构下的不同处理器系列,针对不同的应用领域和需求进行了优化和设计。它们之间的区别和差异主要体现在以下几个方面: 1. 应用领域&#…

倒计数器:CountDownLatch

CountDownLatch 是 Java 中用于多线程编程的一个同步工具。 它允许一个或多个线程等待其他线程执行完特定操作后再继续执行。 CountDownLatch 通过一个计数器来实现, 该计数器初始化为一个正整数,每当一个线程完成了指定操作,计数器就会减一。…

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现 漏洞名称影响版本影响版本 漏洞复现环境搭建漏洞利用 总结 漏洞名称 影响版本 Apache CouchDB是一个开源的NoSQL数据库,专注于易用性和成为“完全拥抱web的数据库”。它是一个使用JSON作为数据存储格式…

【深度学习】序列生成模型(六):评价方法计算实例:计算ROUGE-N得分【理论到程序】

文章目录 一、BLEU-N得分(Bilingual Evaluation Understudy)二、ROUGE-N得分(Recall-Oriented Understudy for Gisting Evaluation)1. 定义2. 计算N1N2 3. 程序 给定一个生成序列“The cat sat on the mat”和两个参考序列“The c…

JavaSE 搜索树

目录 1 概念2 操作2.1 查找2.2 插入2.3 删除 3 性能分析4 和 java 类集的关系 1 概念 二叉搜索树 又称 二叉排序树,它是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它…

js使用promise对象达到promise waiting

async getInfoFormName() {return new Promise((resolve, reject) > {let infoForm: string;if (this.showBox "basic-info-box") {infoForm "basicInfoForm";} else {infoForm "extendInfoForm";}resolve(infoForm);});} 使用这个Priomi…

[Java][File]文件的创建与删除

对一个File类型的对象而言 1.创建一个新的空的文件 createNewFile 2.制作单级文件夹 mkdir 3.制作多级文件夹 mkdirs 4.删除文件、空文件夹 delete 注意:这个方法不会走回收站的 import java.io.File; import java.io.IOException;public class Main{public static …

Logistic Regression逻辑线性回归(基于diabetes数据集)

目录 介绍: 1、Confusion Matrix: 2、ROC(Receiver Operating Characteristic) 一、数据处理 二、建模 三、 confusion_matrix 四、 ROC(Receiver Operating Characteristic) 介绍: L…

class085 数位dp-下【算法】

class085 数位dp-下【算法】 code1 P2657 [SCOI2009] windy 数 // windy数 // 不含前导零且相邻两个数字之差至少为2的正整数被称为windy数 // windy想知道[a,b]范围上总共有多少个windy数 // 测试链接 : https://www.luogu.com.cn/problem/P2657 // 请同学们务必参考如下代码…

好习惯的重要性

养成习惯的五个步骤 提高认识 引导孩子对养成某个习惯产生兴趣明确规范 让孩子对养成某个好习惯的具体规范持久训练 坚持不懈的行为规范,让孩子由被动到主动再到自动及时评估 让孩子在成功的体验中养成良好习惯形成环境 让家庭生活和学校环境乃至社会风气成为孩子养…

7款创意性前端源码特效资源分享(附在线预览效果)

分享7款非常不错炫酷的前端特效源码 其中包含css动画特效、js原生特效、svg特效等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 CSS绘制iPhone 14带动态岛 纯CSS绘制iPhone 14带动态岛模型 运行初始化时还附带出场动画 …

微信小程序动态导航栏(uniapp + vant)

本文使用到vant的van-tabbar组件来实现 一、uniapp整合vant ui vant小程序版本:https://vant-contrib.gitee.io/vant-weapp/#/home 注:vant并没有uniapp的版本,所以此处是引入小程序版本的ui 1. 下载vant编译后代码 https://github.com/youzan/vant-weapp/tree/dev/dist 2…

vue中对keep-alive的理解

vue中对keep-alive的理解 介绍使用方法参数解析使用示例 介绍 keep-alive是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。它有两个属性: include(包含的组件缓存) 与 exclude(排除的组件不缓存,优先级大于include) 。 使…

CentOs7.x安装部署SeaTunnelWeb遇到的坑

CentOs7.x安装部署SeaTunnelWeb遇到的坑 文章目录 1. 环境2. SeaTunnel安装部署2.1下载安装包2.2 设置环境变量2.3 安装连接器插件2.4 拷贝jar包到lib下2.5 启动命令2.6 执行官方client提交任务demo 3. SeaTunnel-Web安装部署3.1 下载安装包3.2 初始化数据库脚本或修改配置appl…

element plus 表格el-table行多选单选

1 行多选-点击checkbox 添加一个 el-table-column&#xff0c;设 type 属性为 selection 即可 <template><div class"box"><el-table :data"tableData" selection-change"handleSelectionChange"><el-table-column type&…

【单调栈】LeetCode:1944队列中可以看到的人数

作者推荐 【贪心算法】【中位贪心】.执行操作使频率分数最大 题目 有 n 个人排成一个队列&#xff0c;从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights &#xff0c;每个整数 互不相同&#xff0c;heights[i] 表示第 i 个人的高度。 一个人能 看到 他右边另一个人…

计算机网络 运输层下 | TCP概述 可靠传输 流量控制 拥塞控制 连接管理

文章目录 3 运输层主要协议 TCP 概述3.1 TCP概述 特点3.2 TCP连接RSVP资源预留协议 4 TCP可靠传输4.1 可靠传输工作原理4.1.1 停止等待协议4.1.2 连续ARQ协议 4.2 TCP可靠通信的具体实现4.2.1 以字节为单位的滑动窗口4.2.2 超时重传时间的选择4.2.3 选择确认SACK 5 TCP的流量控…

(C)一些题14

1.下列定义不正确的是&#xff08;C A .# define PI 3.141592 C . int max ( x , y ); int x , y ;{} B .# define S 345 D . static char c ; 函数没有定义x&#xff0c;y的类型 2&#xff0e;以下程序段的输出结果为&#xff08;D char c []" abc "; int i …

边缘计算有哪些常用场景?TSINGSEE边缘AI视频分析技术行业解决方案

随着ChatGPT生成式人工智能的爆发&#xff0c;AI技术在业界又掀起一波新浪潮。值得关注的是&#xff0c;边缘AI智能也在AI人工智能技术进步的基础上得到了快速发展。IDC跟踪报告数据显示&#xff0c;2021年我国的边缘计算服务器整体市场规模达到33.1亿美元&#xff0c;预计2020…