FastAPI 进阶:使用 BackgroundTasks 处理长时间运行的任务

news2024/11/13 18:12:18

在 FastAPI 中,BackgroundTasks 是一个功能,它允许你在发送响应给客户端之后执行后台任务。这些任务对于不需要客户端等待的操作非常有用,比如发送电子邮件通知或处理数据。然而,当服务器重启时,由于 BackgroundTasks 是与单个应用实例的生命周期相关联的,它们不会自动恢复执行。
在这里插入图片描述

BackgroundTasks主要适用于不需要跨服务器或长时间运行的轻量级后台任务。对于更复杂或资源密集型的任务,建议使用专门的任务队列管理系统。

如何使用 BackgroundTasks

  1. 导入和定义:首先,你需要从 fastapi 导入 BackgroundTasks 并在路径操作函数中定义一个参数,类型声明为 BackgroundTasks

    from fastapi import BackgroundTasks, FastAPI
    app = FastAPI()
    
  2. 创建后台任务函数:创建一个函数作为后台任务,它可以是普通的函数或异步函数。

    def write_notification(email: str, message: str = ""):
        with open("notifications.txt", "a") as f:
            f.write(f"Notification for {email}: {message}\n")
    
  3. 添加后台任务:在路径操作函数中,使用 .add_task() 方法将任务函数添加到后台任务对象中。

    @app.post("/send-notification/{email}")
    async def send_notification(email: str, background_tasks: BackgroundTasks):
        background_tasks.add_task(write_notification, email, message="test message")
        return {"message": "Notification sent in the background"}
    

技术细节:

  • BackgroundTasks 类来自 starlette.background,FastAPI 直接将其包含在内,以便你可以直接从 fastapi 导入它。
  • 你可以在路径操作函数、依赖项、子依赖项中等使用 BackgroundTasks
  • FastAPI 会将所有后台任务合并在一起,然后在后台按 add_task 的顺序执行。

注意事项:

  • 如果你需要执行繁重的后台计算,且可能需要多个进程运行(例如,不需要共享内存、变量等),使用其他更大的工具,如 Celery,可能会更好。这些工具需要更复杂的配置、消息/作业队列管理器,如 RabbitMQ 或 Redis,它们允许在多个进程中运行后台任务,尤其是在多个服务器中。
  • 但是,如果你需要从同一个 FastAPI 应用程序访问变量和对象,或者需要执行小型后台任务(例如发送电子邮件通知),只需使用 BackgroundTasks
  • BackgroundTasks 并不持久化任务,如果服务器重启,未完成的任务将会丢失。

通过使用 BackgroundTasks,你可以提高应用程序的响应性和效率,同时确保后台任务不会阻塞主线程。这是一个在构建现代异步 Web 应用程序时非常有用的功能。

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

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

相关文章

C++: set与map容器的介绍与使用

本文索引 前言1. 二叉搜索树1.1 概念1.2 二叉搜索树操作1.2.1 查找与插入1.2.2 删除1.2.3 二叉搜索树实现代码 2. 树形结构的关联式容器2.1 set的介绍与使用2.1.1 set的构造函数2.1.2 set的迭代器2.1.3 set的容量2.1.4 set的修改操作 2.2 map的介绍与使用2.2.1 map的构造函数2.…

基于python的mediapipe姿态识别 动作识别 人体关健点 实现跳绳状态判别 计数功能

基于Python的MediaPipe姿态识别实现跳绳状态判别与计数功能 项目概述 本项目旨在利用Google的MediaPipe库,结合姿态识别技术,实现对跳绳动作的实时检测与计数功能。通过识别人体关键点,系统能够准确判断跳绳动作的状态,并实时统…

Java入门:07.Java中的面向对象03

11 this关键字 this关键字有两个作用 第一个作用,用来调用重载的构造方法 public class Test3{public static void main(String[] args){new User();new User("ls");new User("ls","女");} } ​ class User{String name ;String sex…

Autosar工程师必读:ETAS工具链自动化实战指南<三>

----自动化不仅是一种技术,更是一种思维方式,它将帮助我们在快节奏的工作环境中保持领先! 目录 往期推荐 自动化命令--generate 命令语法 参数说明 命令使用前提 场景1:BSW代码生成 场景2:RTE代码生成 场景3&a…

对非洲33国免关税!非洲市场不容错过

2024年9月5日中非合作论坛峰会在北京隆重召开,会议后宣布对非洲33个国家实行0关税的优惠政策,并且在未来三年,推动中国企业对非投资不少于700亿元人民币。 自然而然的,中非友好关系必然会带动中国对非洲市场的出口,近…

云计算实训44——K8S及pod相关介绍

一、K8S基本概念 1、k8s是什么 K8S是Kubernetes的 缩写,由于k 和 s 之间有⼋个字符,所以因此得名。 Kubernetes 是⼀个可移植的、可扩展的开源平台,⽤于管理容器化 的⼯作负载和服务,可促进声 明式配置和⾃动化。 2、k8s的功能…

STM32F1+HAL库+FreeTOTS学习10——任务相关API函数使用

STM32F1HAL库FreeTOTS学习10——任务相关API函数使用 任务相关API函数1. uxTaskPriorityGet()2. vTaskPrioritySet()3. uxTaskGetNumberOfTasks()4. uxTaskGetSystemState()5. vTaskGetInfo()6. xTaskGetCurrentHandle()7. xTaskGetHandle()8. xTaskGetIdleTaskHandle()9. uxTa…

你需要掌握的算法:快慢指针

文章目录 前言龟兔赛跑乌龟能否追上兔子乌龟与兔子在何处相遇龟兔问题的推论 快慢指针基础概念发展历史 快慢指针的应用检测链表是否有环找到链表的中间节点计算链表的环长度找到链表环的入口节点 小结 前言 在处理链表数据结构时,快慢指针是一种非常高效的算法技巧…

鸡尾酒排序算法

目录 引言 一、概念 二、算法思想 三、图例解释 1.采用冒泡排序: 2.采用鸡尾酒排序: 3.对比总结 四、算法实现 1.代码实现 2.运行结果 3.代码解释 五、总结 引言 鸡尾酒排序(Cocktail Sort),也被称为双向冒…

同一天!蚂蚁集团宣布将发布3款AI新产品!腾讯、零一万物、面壁智能推出最新大模型|AI日报

文章推荐 缓解父母焦虑!详细实测!这些免费AI可以成为孩子提高学习能力的得力助手! 附送试听地址!OpenAI ChatGPT被曝将新增8种语音!英特尔酷睿Ultra 200V正式发布|AI日报 今日热点 蚂蚁将发布三款AI新产…

Zynq7020 SDK 初学篇(4)- PL 端 GPIO

1.开发背景 基于 PS 端 GPIO 的基础上,如何调用 PL 端 GPIO 的输入输出 2.开发需求 PL 端按键控制 PL 端 LED 3.开发环境 Zynq7020 Vivado2017.4 4.实现步骤 4.1 设计配置 这里设置 PIO 数量 3 个 由于 PL 端不像 PS 端一样绑定 GPIO,所以需要对上面…

内容营销服务,照亮您的独特优势,助力业务增长

内容营销公司通常会承诺过高但交付不足,而在Digital Commerce Partners,我们走的是相反的方向。我们会调低(然后超越)预期。 由于我们是Copyblogger的SEO和内容营销代理商,我们知道伟大的事情需要时间——这意味着吸引…

【最新华为OD机试E卷-支持在线评测】通过软盘拷贝文件(200分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试E卷,全、新、准,题目覆盖率达 95% 以上,支持…

人工智能安全治理框架导图

资源链接:《人工智能安全治理框架》1.0版发布_中央网络安全和信息化委员会办公室

【Python机器学习】循环神经网络(RNN)——循环网络的记忆功能

文档中的词很少是完全独立的,它们的出现会影响文档中的其他词或者收到文档中其他词的影响: The stolen car sped into the arena. The clown car sped into the arena. 这两句话可能会产生两种完全不同的情感感受。这两个句子的形容词、名词、动词、介词…

算法入门-深度优先搜索2

第六部分:深度优先搜索 104.二叉树的最大深度(简单) 题目:给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:ro…

Tomcat配置及Servlet相关

目录 Eclipse配置Tomcat 1.配置服务器运行环境 2.新建服务器 3.新建动态Web项目 4.创建类继承HttpServlet 5.启动服务器 6.测试访问 请求转发与重定向 请求转发 重定向 Servlet的作用域 Servlet生命周期 这里以Eclipse为例,IDEA配置参考:IDE…

若依框架使用MyBatis-Plus中的baseMapper的方法报错Invalid bound statement (not found):

Invalid bound statement (not found): com.ruoyi.system.mapper.hc.HcOrderMapper.selectList 解决方法 MybatisSqlSessionFactoryBean sessionFactory new MybatisSqlSessionFactoryBean(); 使用 MybatisSqlSessionFactoryBean 而非 SqlSessionFactoryBean 的原因 MyBatis-…

卷轴模式系统源码开发之功能技术分析

随着互联网经济的蓬勃发展,电商平台之间的竞争日益激烈。为了吸引和保留用户,许多电商平台开始探索和采用创新的商业模式。其中,“卷轴模式”作为一种结合了积分奖励和任务兑换机制的新颖模式,逐渐受到了业界的关注。本文将从技术…

智能提醒助理系列-小程序分享到朋友圈

本系列文章记录“智能提醒助理”wx公众号 建设历程,记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍微信小程序如何分享到朋友圈,以及遇到的登录无权限问题和解决方案。 一、需求出发点 智能提醒小程序的推广是一个难点,朋友圈是一个必要…