FastAPI StreamingResponse 使用教程:一文带你轻松掌握

StreamingResponse 是 FastAPI 中的一个类,用于处理流式响应。它允许你将数据以流的形式发送给客户端,适用于处理大文件、实时日志等场景。本文将介绍在 FastAPI 中如何使用 StreamingResponse 类,包括常见场景、实践案例以及在 IDE 编辑器(如:vscode)中运行的步骤。

常见应用场景

StreamingResponse 允许在响应期间逐块发送数据,而不是等到整个响应数据准备好后再发送。

通常情况下,当响应数据较大或需要在处理时逐步生成时,使用 StreamingResponse 可以提供更高效的响应处理和减少内存消耗。

使用 StreamingResponse 可以实现以下场景:

  1. 大型文件下载:当需要下载大型文件时,使用 StreamingResponse 可以逐块地将文件数据发送给客户端,减少内存占用。
  2. 实时数据流:当需要实时将数据流式传输到客户端时,如实时日志或事件流,使用 StreamingResponse 可以逐块地发送数据并保持长连接。

使用 StreamingResponse

首先,确保你已经安装了 FastAPI。你可以通过以下命令使用 pip 安装 FastAPI:

pip install fastapi

接下来,我们将创建一个简单的 FastAPI 应用程序,并使用 StreamingResponse 类返回一个流式响应。请在你的 IDE 编辑器中创建一个名为 fastapi-stream.py 的文件,并将以下代码粘贴到其中:

from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import io

app = FastAPI()

@app.get("/stream")
async def stream_response():
    data = b"hello world\n" * 20000
    stream = io.BytesIO(data)
    return StreamingResponse(stream, media_type="text/plain")

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="127.0.0.1", port=8000)

在上面的代码中,通过使用 io.BytesIO 创建了一个字节流对象 stream,并将其作为数据源传递给 StreamingResponse 对象。这个字节流对象 stream 包含了一个重复了 20000 次的 “hello world\n” 的字节数据。

通过返回 StreamingResponse(stream, media_type="text/plain"),FastAPI 将会逐个读取字节流中的数据块并将其返回给客户端。

这里的关键是将字节流对象作为数据源传递给 StreamingResponse。FastAPI 会从字节流中逐个读取数据块,并将每个数据块作为响应的一部分返回给客户端。客户端在接收到一个数据块后可以开始处理数据,而不需要等待整个响应的完成。

在这个示例中,FastAPI 会逐个读取字节流中的数据块(每个数据块是 “hello world\n”),然后将它们逐个返回给客户端。客户端在接收到每个数据块时可以立即处理数据,而不需要等待全部数据块的接收完成。

运行程序

要运行 FastAPI 应用程序,并测试 StreamingResponse 的功能,我们需要使用 uvicorn 这样的 ASGI 服务器。请确保你已经安装了 uvicorn。你可以通过以下命令使用 pip 安装它:

pip install uvicorn

在你的 IDE 编辑器中,打开终端并导航到存储 fastapi-stream.py 文件的目录。然后运行以下命令启动应用程序:

uvicorn fastapi-stream:app --reload

现在,你可以使用 HTTP 请求工具(如 cURL、Apifox 或浏览器插件)向 http://localhost:8000/stream 发送 GET 请求。你将能够在响应中看到按一秒钟间隔生成的数据。

使用 Apifox 调试 FastAPI 接口

Apifox 是一个集 API 文档、API 调试、API Mock和API 自动化测试于一体的 API 协作平台,我们可以通过 Apifox 来更方便的调试 FastAPI。

立即体验 Apifox

如果想快速的调试一条接口,新建一个项目后,在项目中选择**“调试模式”**,填写请求地址后即可快速发送请求,并获得响应结果,上文的实践案例如图所示:

FastAPI 中 StreamingResponse 类的使用Apifox 调试 FastAPI 接口

总结

本文介绍了在 FastAPI 中使用 StreamingResponse 类的方法,在实践案例中,我们展示了一个简单的示例,其中生成了一系列的数据并将其以流的形式返回。

StreamingResponse 类是 FastAPI 中处理流式响应的强大工具,适用于处理大文件、实时日志等需要流式传输的场景。同时,使用 Apifox 进行接口调试,大大提高了项目的开发效率,图形化的操作界面也更加方便。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值