fastapi_No.18_后台应用

article/2025/10/8 6:28:06

文章目录

  • 简介
    • 使用场景
  • 创建后台应用步骤
    • 第一步:定义后台应用函数
    • 第二步:使用后台应用函数
  • 在依赖项中的后台应用
    • 示例代码
    • 示例代码说明

简介

后台应用就是在发送响应后运行的函数。通常用在请求后需要耗费较长时间处理,且客户端不需要在接收请求前接收处理结果。也就是说后台应用可以理解为两点:

  • 处理时间长
  • 客户端对该函数响应结果无要求

使用场景

  • 邮件提醒
  • 数据处理

创建后台应用步骤

第一步:定义后台应用函数

# 创建一个函数,表示后台运行的函数
# 定义后台运行函数
def send_email(email:str,message:str):with open("log.txt",mode='a+') as email_file:content = f"notification for {email}: {message}"email_file.writelines(content)

第二步:使用后台应用函数

从fastapi中导入BackgroundTasks,并在路径操作函数中定义一个BackgroundTasks类型的参数。

#导入BackgroundTasks类
from fastapi import BackgroundTasks, FastAPI
app = FastAPI()
@app.post("/send-notification/{email}")
#在路径操作函数中添加BackgroundTasks类的参数
async def send_notification(email:str, bt:BackgroundTasks):# 将后台运行函数,添加到BackgroundTasks实例对象中,并传入后台运行函数的形参值bt.add_task(send_email,email,message=datetime.now().isoformat())return {"message":"Notification sent in the background"}

完整代码

# 导入包
from fastapi import FastAPI,BackgroundTasks
from datetime import datetime
app = FastAPI()
# 定义后台运行函数
def send_email(email:str,message:str):with open("log.txt",mode='a+') as email_file:content = f"notification for {email}: {message}"email_file.writelines(content)
@app.post("/send-notification/{email}")
#在路径操作函数中添加BackgroundTasks类的参数
async def send_notification(email:str, bt:BackgroundTasks):# 将后台运行函数,添加到BackgroundTasks实例对象中,并传入后台运行函数的形参值bt.add_task(send_email,email,message=datetime.now().isoformat())return {"message":"Notification sent in the background"}
if __name__ == "__main__":import uvicornuvicorn.run("singlebackgroundtask:app",host="127.0.0.1",port=8080,reload=True)

测试结果:
在这里插入图片描述
在这里插入图片描述

在依赖项中的后台应用

后台应用除了可以应用在路径操作函数中外,还可以应用在依赖项中,也可以应用在子依赖中。
fastapi不是每一步在每个有后台应用的函数运行结束后就立刻运行后台应用函数,而是在说有的函数都运行结束后,fastapi根据之前记录的调用后台应用函数的顺序,一次执行多次后台应用函数。

示例代码

这里编写了一个示例来说明这个问题:

from typing import Union
import time
from fastapi import BackgroundTasks,Depends,FastAPI
app = FastAPI()
# 定义一个后台应用函数
def write_log(message:str):with open("log1.txt",mode="a") as log:log.write(message+'\n')# 定义一个嵌套的后台应用函数
def get_query(background_tasks:BackgroundTasks,q:Union[str,None] = None):if q:message = f"found query: {q}"background_tasks.add_task(write_log,message)print("依赖函数执行完毕")return q
@app.post("/send-notification/{email}")
async def send_notification(email:str, background_tasks:BackgroundTasks,q:str = Depends(get_query)
):message = f"message to {email}"background_tasks.add_task(write_log,message)print("路径操作函数执行完毕")time.sleep(5)return {"message":"message sent","q":q}if __name__ == "__main__":import uvicornuvicorn.run("multibackgroundtask:app",host="127.0.0.1",port=8080,reload=True)

由于让系统睡眠了5s,通过观察目前已经打印了函数执行完毕。但是还没有后台运行程序执行,因为文件中还没有log1.txt文件出现。
这就说明了后台应用函数是一起执行的,且晚于依赖函数和路径操作函数。
在这里插入图片描述
后台应用函数输出文件内容看出,先执行了依赖函数中的那次输出,在执行了路径操作函数中的那次输出。
在这里插入图片描述

示例代码说明

参考下图进行理解。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/L1LQBJq6.shtml

相关文章

win11如何禁用后台应用权限 Windows11禁用后台应用权限的设置方法

我在使用Win11系统的电脑时经常会遇到自动打开应用程序情况,很多小伙伴都不知道到如何关闭,那么遇到这种情况应该要如何解决呢?下面就和小编一起来看看Win11系统要如何去禁用软件的后台权限吧。更多windows11系统教程,可以参考小白一键重装网…

提高软件CPU占用率

案例: 独立线程以5ms一包的速率接收指令(一共大概70-80种指令类型),并放入一个队列A 主线程中,根据定时器去队列A中取数据,并解析/计算/显示(速率:200包/秒) 现象&…

CPU使用率100%,如何解决

文章目录 CPU使用率概念CPU使用率的重要指标计算公式 查看CPU使用率CPU 使用率过高总结 CPU使用率 概念 单位时间内CPU使用情况的统计,以百分比方式显示 Linux是一个多任务操作系统,将每个CPU的时间划分为很短的时间片,通过调度器轮流分配…

解决 服务器cpu使用率100%,变成矿鸡之我与病毒crypto斗智斗勇,宝塔面板cpu使用率100%爆红

关于 简单解决宝塔面板显示CPU使用率 100%,但top却没找到相关进程这件事!!! 如图: 作为一个小白,我只是想简单的搭建一个个人网站,结果碰到这个闹心的事。 服务器: 阿里云服务器 面板&#xff…

linux的mysql占用cpu过高_关于在Linux环境下,Mysql占用CPU使用率100%的优化

今天使用 MobaXterml 连接上一台物联网的Linux服务器的使用,发现该服务器的CPU使用率一直在100%左右。 使用top 命令发现Mysql占用了大量的CPU 用数据库工具 Navicat premium 以 root 的身份连接数据库,执行查询语句: show PROCESSLIST; 发现…

CPU使用率到100%,有哪些因素影响?

关注星标公众号,不错过精彩内容 转自 | 涛哥依旧 最近,一位同事急匆匆跑过来跟我说:糟糕了,服务器CPU的使用率达100%了。 我心想不可能啊,CPU有那么多核,怎会跑满?于是看了一眼,结果…

记一次golang cpu 占用100%

最近重新部署了下测试服务器,发现其负载达到了4.*, cpu 使用率达到了100%,吓的瑟瑟发抖,马上起来查看情况。 1, 想到了使用go性能查看工具: pprof,因为项目是用gin开发的,所在直接安…

Mysql CPU占用100%查询

这几天每天都会收到服务器负载报警,抽出时间查看一下原因。 进入到服务器使用top命令查看: 能够看到是mysql常年霸居榜首,导致服务器负载变高。理论上来讲,数据量没有那么大,因为很多数据都是没用的,前一段…

【故障排查】如何排查CPU占用100%

线上后台报警CPU占用100%,CPU占用过高,本文介绍一下如何排查CPU占用过高原因。 步骤1. top 输入top命令,找到占用CPU最高的进程。按ShiftP键排序: 可以看到CPU占用最高的pid是92129。 步骤2. top -Hp pid 查看指定进程内线程信…

vmware虚拟机WinXp sp3的系统cpu占用100%的解决方案

0x00 问题场景 1. 环境配置 角色版本位数备注虚拟机软件VMware Workstation15\原始版本12,升到15Host OSWindows 7 Professional6.1.7601, Service Pack 164-bit\Guest OSWindows XPservice Pack 332 bit\ 2. 环境说明 VMware在很久以前是version12,…

Win10环境VMware开WinXP虚拟机CPU占用100%

解决办法 网上试了各种方法,还是不太行,最后莫名其妙的好了。而这之前我只做了一件事,在windows的功能里打开hyper-V服务。 后续 某一天,windows系统自动更新了,然后本来运行得好好的win xp虚拟机变得巨卡。我在w…

IDEACPU占用100%_卡顿 解决办法

解决IDEA占用CPU100%的问题 直接上答案为什么会占用CPU如何查找占用CPU的原因 直接上答案 绝大部分的原因是你打开了一个有非常非常多的代码的类,并且你并不编辑这个类,你只是打开了。。。 当然,如果不是这样,你才能去排查是不是…

linux的cpu使用率100%?

1:背景 在linux环境中,我们都会通过top指令获取当前实例的进场占用cpu情况,如下所示 [123456789root ~]$ top top - 11:48:13 up 622 days, 15:51, 2 users, load average: 0.22, 0.19, 0.11 Tasks: 788 total, 1 running, 787 sleepin…

【最实用实战】如何排查CPU占用100%

线上后台报警CPU占用100%,CPU占用过高,本文介绍一下如何排查CPU占用过高原因。 步骤1. top 输入top命令,找到占用CPU最高的进程。按ShiftP键排序: 可以看到CPU占用最高的pid是92129。 步骤2. top -Hp pid 查看指定进程内线程信…

虚拟机CPU占用100%问题记录

项目场景 kswapd0占用CPU过高,严重影响服务器及虚拟机的使用。 原因分析 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。 系统物理内存不足时,kswapd0 会频繁的进行换页操作(使用swap分区与内存换页操作交换数据)&…

linux cpu占用100%排查

步骤一、找到最耗CPU的进程 工具:top 方法: 执行top -c ,显示进程运行信息列表键入P (大写p),进程按照CPU使用率排序图示: 线上服务CPU100%问题快速定位实战 如上图,最耗CPU的进程PID为10765 步骤二&…

揭秘win10系统CPU占用100%的真正原因/找出那些罪魁祸首

经常会有 Win10 用户反应,电脑没有运行太多程序,但是在任务管理器中,经常可以看到电脑CPU占用率却一直居高不下。那么,CPU占用100%的正真原因是什么呢?下面小编收集了一些针对CPU占用过高的原因及解决办法&#xff0…

CPU占用100%的原因及解决办法

电脑关机故障速解 经常出现cPU占用100%的情况,主要问题可能发生在下面的某些方面: cPU占用率高的九种可能 1、防杀毒软件造成故障 由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理…

前端请求SDK_前端埋点:质量指标验证

背景 随着万物互联、线上线下结合,终端触达的面越来越广,数据采集应该是企业数据团队最基础和重要的工作之一。做数据的同学应该深有体会,收集的数据内容是否全面、准确、实时,直接影响到数据处理和计算的成本、分析和应用的准确。…

前端埋点方案研究及在Android项目中的实践

前言 数据埋点的质量直接关系到前端监控、数据分析结果的准确性,对应用的用户行为分析、数据分析决策、数据化运营、错误分析来说都是基础的存在,在前端监控与数据分析中是第一个重要的步骤。中本文聚焦于目前主流埋点方案的探究,以及其在An…