FastAPI简单使用

fastapi教程(一):初识 fastapi FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。 阅读详情

FastAPI简单使用

1 介绍

FastAPI是一个高性能的Web框架,支持自动数据验证**、**自动文档生成和异步。

https://fastapi.tiangolo.com/

Uvicorn是一款基于ASGI协议的高性能Python Web服务器,专为异步框架设计,支持FastAPI、Starlette等现代Web框架。

1.1 异步编程

在Python中异步编程中,关键字async 和 await很重要:

async 的作用

  • 用于定义一个协程函数(coroutine function)。
  • 调用 async 函数时,不会立即执行函数体,而是返回一个 协程对象(coroutine object),需要被事件循环调度执行。

await的作用

  • 用于暂停当前协程,等待一个 awaitable 对象(如另一个协程、asyncio.sleep()、asyncio.Future 等)完成。
  • 不会阻塞事件循环,而是让出控制权,允许其他协程运行。
  • await 只能在 async def 函数中使用。

示例

import asyncio

# 异步调用数据
async def fetch_data():
    print("Hello")
    await asyncio.sleep(5)
    print("World")

# 调用不会执行,而是返回协程对象
coro = fetch_data()
print(type(coro))


async def main():
    # 等待 fetch_data() 完成
    result = await fetch_data()
    print("获取到的结果:", result)

asyncio.run(main())

1.2 异步和多线程的区别

在 Python 中,异步(asyncio) 和 多线程(threading) 都可以实现“同时干多件事”,但它们的底层机制、性能表现和适用场景完全不同。下面用一句话总结:

异步是“单线程内协作式并发”,多线程是“操作系统级抢占式并发”。

IO 高并发用 async,简单并发用 thread,CPU 密集用 process

维度异步(asyncio)多线程(threading)
核心机制事件循环 + 协程(用户态调度)操作系统线程(内核态调度)
线程数单线程(默认)多线程
切换开销极低(用户态切换)较高(内核态上下文切换)
GIL 影响不受影响(单线程)受 GIL 限制(CPU 密集任务无法并行)
适合任务高并发 I/O 密集(如爬虫、API 请求)少量 I/O 密集或简单并发任务
编程难度较高(需写 async/await)较低(同步代码即可)
数据竞争无(单线程)有(需加锁、同步)

1.3 异步≠立即响应客户端

假设你有这样一个异步路径操作函数:

from fastapi import FastAPI
import asyncio

app = FastAPI()

@app.get("/")
async def read_root():
    # 模拟一个耗时的 I/O 操作,比如数据库查询
    await asyncio.sleep(2)
    return {"message": "Hello World"}

当一个请求 GET / 到来时,会发生以下步骤:

  1. 接收请求:FastAPI 从客户端接收到 HTTP 请求。
  2. 创建任务:FastAPI 创建一个任务来执行你的 read_root 函数。
  3. 事件循环接管:FastAPI 将你的函数(一个协程)交给 ASGI 服务器(如 Uvicorn 或 Hypercorn)内部的事件循环。
  4. 执行直到第一个 await:事件循环开始执行 read_root 函数。
  5. 遇到 await(关键点!):
    • 当执行到 await asyncio.sleep(2) 时,函数会说:“我要睡眠 2 秒,在这期间我什么都不做,你去忙别的吧!”
    • 此时,事件循环会立即挂起这个函数。
    • 事件循环不会阻塞等待,它会立刻去处理其他正在排队的任务(可能是另一个来自客户端的请求,或者是其他异步操作)。
  6. 等待完成:2 秒后,睡眠操作完成。
  7. 恢复执行:事件循环在适当的时机(当它轮询到睡眠完成的事件时)重新唤醒 read_root 函数,并从 await 之后的地方继续执行。
  8. 返回响应:函数执行到最后,返回 {"message": "Hello World"}。
  9. 发送响应:FastAPI 将这个 Python 字典转换为 JSON,并通过 HTTP 响应发送回客户端。

1.4 同步 vs 异步

为了更好地理解,我们看一个同步的例子:

import time

@app.get("/sync")
def read_root_sync():
    # 模拟一个耗时的 I/O 操作
    time.sleep(2)  # 注意:这里是同步的 sleep
    return {"message": "Hello World Sync"}

对于这个同步端点:

  • 当执行到 time.sleep(2) 时,整个工作线程被彻底阻塞 2 秒。
  • 在这 2 秒内,这个线程不能做任何其他事情,即使有新的请求进来,它也无法处理。
  • 如果并发请求数超过了工作线程数,新请求就必须排队等待,导致性能急剧下降。

1.5 FastAPI的特点

  • FastAPI 的异步机制并不能让你的业务逻辑执行得更快。一个需要 2 秒的数据库查询,在异步函数里仍然需要 2 秒才能拿到结果。
  • 它的巨大优势在于提升服务器的并发吞吐量。通过在等待 I/O 时释放线程,让有限的服务器资源可以同时服务更多的客户端连接。
  • 你“立即”得到的是事件循环的解放,而不是给客户端的最终响应。

因此,你应该将异步用于那些主要是 I/O 密集型 的操作(如网络请求、数据库查询、文件读写),而不是 CPU 密集型 的操作(如复杂的数学计算)。对于 CPU 密集型任务,你应该使用 def 定义普通函数,并让 FastAPI 在单独的线程池中运行它们。

2 简单使用

2.1 安装依赖环境

pip install "fastapi[standard]"
pip install uvicorn

2.2 简单使用FastAPI

import asyncio
from typing import Union

import uvicorn
from fastapi import FastAPI, BackgroundTasks, Query
from pydantic import BaseModel, Field

app = FastAPI()

"""
FastAPI中参数校验的关键字有Field、Query、Path。
其中Field和Query的作用相似,不同点是字段 Field,参数 Query/Path,写在模型里 → Field;写在函数签名里 → Query/Path。
三个点 (...) 被称为 Ellipsis(省略号),它是一个内置常量,主要作为占位符和切片工具使用。
"""


class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None


class TaskInfo(BaseModel):
    task_id: int = Field(..., ge=1, le=120, description="任务编号")


@app.get("/read")
def read_item(item_id: int = Query(..., ge=1, le=120, description="数据编号"), data: Union[str, None] = None):
    return {"item_id": item_id, "data": data}


@app.post("/update/{item_id}")
async def update_item(item_id: int, item: Item):
    # time.sleep(10)
    await asyncio.sleep(4)
    return {"item_id": item_id, "item_name": item.name}


async def long_running_task(task_id: int):
    # 模拟耗时操作
    await asyncio.sleep(10)
    print(f"任务 {task_id} 完成")


@app.post("/task")
async def create_task(task_info: TaskInfo, background_tasks: BackgroundTasks):
    # 将任务添加到后台执行
    background_tasks.add_task(long_running_task, task_info.task_id)

    return {
        "status": "任务已接收",
        "task_id": task_info.task_id,
        "message": "任务正在后台处理"
    }


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=3000)

2.3 返回值

(1)接口文档地址

http://127.0.0.1:3000/docs

(2)读取数据地址

http://127.0.0.1:3000/read

(3)更新数据,不会立刻返回值

http://127.0.0.1:3000/update/1

参数

{
    "name": "张三",
    "price": 0.12,
    "is_offer": true
}

(4)异步任务,立刻返回值。

http://127.0.0.1:3000/task

如何评价最近爆红的FastAPI? 一度觉得sanic是pythonweb框架的未来,支持异步,性能好,类flask的语法,代码简单,没想到被fastapi截胡了,fastapi在github的上星速度非常快。它在怎么样把后端api做好的这件事情上,做的比sanic更全面,更彻底。是用于构建WebAPI的现代、开源、快速、高性能的Web框架,它基于Python3.6+标准类型提示,支持异步,正如它的名字,FastAPI就是为构建快速的API而生。... 阅读详情

相关推荐

FastAPI Web框架教程 第1章 快速上手

FastAPI 是一个。

此博客内容主要是小可日常工作中的一些问题解决的记录整理而成 3506

Python高性能web框架--Fastapi快速入门

fastapi是建立在Starlette和Pydantic基础上的,Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。 Starlette是一种轻量级的ASGI框架/工具包,是构建高性能Asyncio服务的理性选择。 - 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic),是最快的 Python web 框架之一。 - 高效编码:提高功能开发速度约 200% 至 300%。 - 更少bug:减少约 40% 的人为bug

景天科技苑 2万+

fastAPI简单使用

目录前言一、fastAPI是什么?二、安装1.fastapi的安装(此处用的是阿里云镜像源)2.测试一下三、使用1.声明路径参数2. 声明路径参数有效值3. 声明路径参数为路径4. 声明params参数5. 请求体(如post请求会用到的data) 前言 利用python fastAPI框架搭建简便的api服务 一、fastAPI是什么? FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。总之它可以简单快

weixin_45541986的博客 3544

Python从入门到精通1:FastAPI

FastAPI 是一个基于 Python 3.8+ 的现代 Web 框架,专注于构建高性能 RESTful API。基于 Starlette 和 Pydantic:提供异步支持和严格的数据验证。自动生成 API 文档:内置 Swagger UI 和 ReDoc,开发者无需手动维护文档。类型提示(Type Hints):利用 Python 的类型系统实现输入参数验证和代码提示。FastAPI 凭借其高性能和开发效率,已成为构建现代 API 的首选框架。基础路由设计与参数验证。

m0_74488469的博客 2万+

在 Ubuntu 中使用 FastAPI 创建一个简单的 Web 应用程序

通过以上步骤,你已经在 Ubuntu 系统中成功创建并运行了一个简单的 FastAPI 应用。FastAPI 的优势在于其高性能和易用性,特别适合构建现代化的 Web API。如果你还想探索更多功能(如 API 文档、数据验证、认证等),可以参考FastAPI 官方文档。祝你在使用 FastAPI 进行开发时一切顺利!

大白菜代码的博客 1469

从爱好者到工程师:如何低成本体验RFSoC ZU47DR?性能实测与避坑指南

本文详细介绍了如何低成本体验赛灵思RFSoC ZU47DR芯片,包括二手开发板选购、租赁服务、精简开发环境搭建等实用方案。通过性能实测与避坑指南,帮助爱好者和工程师在有限预算下充分利用这款集成了ARM处理器和FPGA的高性能芯片,降低开发门槛。

weixin_42525005的博客 221

FastAPI 介绍及简单使用

FastAPI作为新兴的高性能Python Web框架,凭借其卓越特性在后端开发领域迅速崛起。本文从两个核心维度剖析FastAPI:首先介绍其设计背景与四大核心优势,包括媲美Node.js/Go的高性能表现、提升开发效率的自动文档生成、增强代码质量的类型提示与数据验证机制,以及灵活高效的依赖注入系统;其次通过具体实例演示FastAPI的快速上手过程,涵盖环境搭建、路由定义、API文档自动生成(Swagger UI和ReDoc)以及三类参数处理(查询参数、路径参数和请求体参数)。这些特性使FastAPI成为构

charles666666的博客 1050

保姆级教程:在MMSegmentation框架下复现HRNetV2+OCR语义分割(附完整代码与调试技巧)

本文提供了一份详细的MMSegmentation框架下HRNetV2+OCR语义分割的复现教程,包含完整代码与调试技巧。通过解析HRNetV2的多尺度特征融合和OCR模块的注意力计算,帮助开发者快速实现这一经典语义分割方案,并解决实际工程中的常见问题。

weixin_42527464的博客 360

FASTAPI系列 02-简单入门

FASTAPI 简单入门

lzq599220的博客 999

HFSS实战:手把手教你设计3.3-10.6GHz超宽带微带天线(附S11优化技巧)

本文提供了一份基于Ansys HFSS的超宽带微带天线实战设计指南,详细讲解了从3.3GHz到10.6GHz天线的建模、仿真与优化全流程。文章重点剖析了阻抗匹配的核心挑战,并分享了通过接地板开槽、参数化扫描及目标驱动优化等系统性技巧来优化S11曲线的实用方法,帮助射频工程师快速掌握超宽带天线设计的关键技能。

2y3u4i5o6p的博客 1081

YOLOv8-Pose NCNN Android部署优化实践

本文探讨了在Android设备上高效部署YOLOv8-Pose姿态检测模型的优化实践。通过修改Pose头部导出逻辑,分离后处理到C++端实现,并替换SiLU激活函数为ReLU,显著提升了计算效率。具体步骤包括模型结构优化、ONNX导出、NCNN转换与算子融合,最终在Android端实现了30FPS的稳定推理性能。项目提供了完整的优化思路和实现方案,对移动端AI应用开发具有参考价值。

FJN110的博客 323

创建最简单FastApi的项目

【代码】创建最简单FastApi的项目。

qq_74929891的博客 448

搞定ESD(二):ESD干扰机理分析

大家好,我是记得诚。上文介绍了ESD的基本知识,对ESD的测试标准进行了解析,包括静电发生器的介绍,实验布置要求,静电放电实验的实施及判定等内容。本文主要介绍ESD的干扰机理。

记得诚 4300

fastapi socketio 简单使用

fastapi 集成python-socketio的简单说明参考使用安装依赖登录后复制 pip install fastapi uvicorn python-socketio1.backend 代码登录后复制 from fastapi import FastAPI,Body from fastapi.middl...

weixin_40387232的博客 259

AI OS与LLM as OS:人工智能操作系统的崛起

近年来,随着大语言模型(Large Language Model, LLM)技术的突飞猛进,人工智能领域掀起了新的革命浪潮。以ChatGPT、GPT-4等为代表的LLM模型展现出了惊人的自然语言理解和生成能力,使得人机交互前所未有地拟人化、情境化。在此背景下,业界开始探索将LLM作为操作系统(Operating System, OS)的可能性,由此催生出"AI OS"和"LLM as OS"的概念。本文将深入解读这两个前沿概念,分析其内涵、技术原理、应用前景及面临的挑战。

AI天才研究院 993

卸载python弹框报错:Could not set file security for file ‘D:\Config.Msi\abd5.rbf‘. Error: 5. Verify...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 6487

创建一个最简单的FastAPI

五步生成一个最简单的fastapi: 1.导入 FastAPI。 2.创建一个 app 实例。 3.编写一个路径操作装饰器(如:@app.get("/"))。 4.编写一个路径操作函数(如上面的 def root(): ...)。 5.运行开发服务器(如:uvicorn main:app --reload)

Python全栈系列 1497

解决Windows 11文件右键菜单卡死问题的方法

当你右键点击一个文件或者文件夹时,系统会加载与该文件类型相关的上下文菜单项,如果其中某个菜单项的代码执行时间过长或者出现错误,就会导致整个右键菜单卡死。综上所述,当你在Windows 11中遇到右键菜单卡死的问题时,你可以尝试禁用上下文菜单项、重置文件关联、排除第三方软件干扰、修复系统文件以及优化代码等方法来解决问题。如果你是一个开发者,并且你自己编写了一个上下文菜单项,那么问题可能出在你的代码中。例如,如果你遇到了图片文件的右键菜单卡死问题,你可以找到".jpg"或".png"等相关的子项。

HnrzLinux的博客 7536

【fastAPI】fastAPI简单运用--20231008

【fastAPI】fastAPI简单运用--20231008

Season 优快云博客 311

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

fastapi简单使用

摘要: 本文介绍了如何简单安装和使用FastAPI框架

weixin_52726252的博客 169

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

使用docker desktop简单部署fastapi

本文介绍了在Windows11系统下使用Docker Desktop部署FastAPI应用的完整步骤。首先创建FastAPI接口代码(app.py),然后编写Dockerfile文件并配置requirements.txt依赖。接着安装Docker Desktop,更新WSL并通过命令验证安装。最后在代码目录下运行docker compose up命令完成部署。文章还提供了解决镜像拉取失败的方法,并展示了最终部署成功的截图。整个过程涵盖了从开发环境搭建到应用部署的关键环节。

qq_43422830的博客 292

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【无标题】fastapi简单使用

● 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。● 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。● 智能:极佳的编辑器支持。● 健壮:生产可用级别的代码。● 简单:设计的易于使用和学习,阅读文档的时间更短。一、fastapi简介。

2401_83569627的博客 869

【FastAPI 02】如何用最最最简单的方式理解一个FastAPI程序?

大家好,我是Kuls。这篇文章主要是跟大家详细剖析一个简单的FastAPI程序。这个程序就是我们上篇文章中所写的:fromfastapiimportFastAPI app=Fas...

Kuls 3325

【FastAPI】7.使用Tortoise及Fastapi构建一个简单的wms软件

Tortoise ORM 是一个 Python 数据库 ORM 框架,它提供了一种简单的方式来操作数据库,并支持多种数据库,如 MySQL、PostgreSQL、SQLite 等。

weixin_41270232的博客 490

FASTAPI的简单理解

上面的示例中,路径中的{language_id}声明了一个路径参数language_id,对应的函数find_language(language_id)中通过定义同名的函数参数来接受数据值,但此处未对参数类型进行定义,所以在返回数据时采用int(language_id)对数据值进行了类型转换。查询参数 q 的类型是 Optional[str],即它的类型是 str,但也可以是 None(其实,是它的默认值为 None), q 是可选参数。如果把有默认值的参数置于无默认值的参数前,Python 会报错。

weixin_36723038的博客 1548

FastAPI简单安全认证解决方案

FastAPI简单安全认证解决方案 FastAPI简单安全认证(fastapi_simple_security)是一个针对FastAPI框架设计的轻量级API密钥安全解决方案。该项目主要使用Python编程语言开发。 项目基础介绍 本项目旨在为FastAPI应用提供一种简单易用的API密钥认证机制,主要适用于单服务器API部署,尤其是在开发阶段。项目遵循MIT协议开源,具有高度的可定制性和易用性。...

gitblog_00928的博客 344
上一篇: 简单使用OCRmyPDF
下一篇: 简单使用Marker
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值