当前位置: 首页 > news >正文

fast-api后端 + fetch 前端流式文字响应

fast-api后端 + fetch 前端流式文字响应

  • fast-api后台接口
    • 流式响应
  • 前端
    • fetch 流式文本数据处理

fast-api后台接口

流式响应

from fastapi.responses import StreamingResponse
from tqdm import tqdm
from pydantic import BaseModelclass ItemDataSingle(BaseModel):data: strasync def responce_text_streammer(data):   _data = data.data# 假设你发送过来的data = json.loads(_data)for dat in tqdm(data):dat = your_worker_function(dat)# 给每条数据一个分割标识yield json.dumps(dat,ensure_ascii=False) + "@@+" @app.post("/batchtext2furniture")
async def batchtext2furniture(data: ItemDataSingle,):""":arg"""# mongodbreturn StreamingResponse(responce_text_streammer(data))

前端

fetch 流式文本数据处理

var req_data = {data: JSON.stringify({}),//youdata};
let charsReceived = 0;
const startTime = Date.now();
let result = "";
let num_results = 0;
const decoder = new TextDecoder("utf-8");
fetch("/batchtext2furniture", {method: "POST",headers: { "Content-Type": "application/json" },body: req_data,stream: true,}).then((response) => {const reader = response.body.getReader();return new ReadableStream({async start(controller) {let resev_s = true;while (resev_s) {const { done, value } = await reader.read();if (done) {controller.close();resev_s = false;break;}charsReceived += value.length;const chunk = value;result += decoder.decode(chunk);console.log("Received " + charsReceived + " characters");const responseTime = (Date.now() - startTime) / 1000;num_results += 1;if (result.endsWith("@@+")) {console.log("接收到分割符号");let parts = result.split("@@+");let lastPart = parts[parts.length - 2];// 解析 JSONvar json_data = JSON.parse(lastPart);// 前端具体对每段数据的处理// ......} else {console.log("not endswith @@+");}console.log("数据赋值完成" );controller.enqueue(value);}},});}).then((stream) => {console.log(stream);console.log(stream, "stream");console.log(stream.size);}).catch((error) => {console.error("Error:", error);}).finally(() => {yourfinallyworker();});const endTime = Date.now();console.log(endTime - startTime, "搜索时间");}

相关文章:

fast-api后端 + fetch 前端流式文字响应

fast-api后端 fetch 前端流式文字响应 fast-api后台接口流式响应 前端fetch 流式文本数据处理 fast-api后台接口 流式响应 from fastapi.responses import StreamingResponse from tqdm import tqdm from pydantic import BaseModelclass ItemDataSingle(BaseModel):data: …...

Qt 的 QThread:多线程编程的基础

Qt 的 QThread:多线程编程的基础 在现代应用程序中,尤其是需要处理大量数据、进行长时间计算或者进行 I/O 操作时,多线程编程变得至关重要。Qt 提供了一个功能强大且易于使用的线程类 QThread,可以帮助开发者在 Qt 应用程序中实现…...

周末总结(2024/11/16)

工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...

Chrome和Chromium的区别?浏览器引擎都用的哪些?浏览器引擎的作用?

Chrome和Chromium的区别? Chrome是Google专属的产品,它是基于后者Chromium开源引擎开发。第三方浏览器公司为了加快开发流程,会直接选择开源的浏览器引擎,例如Chromium. Google将Chromium开源,本意为了打破浏览器被其他公司控制的…...

流程图图解@RequestBody @RequestPart @RequestParam @ModelAttribute

RequestBody 只能用一次,因为只有一个请求体 #mermaid-svg-8WZfkzl0GPvOiNj3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8WZfkzl0GPvOiNj3 .error-icon{fill:#552222;}#mermaid-svg-8WZfkzl0GPvOiNj…...

AutoUpdater.NET 实现 dotNET应用自动更新

AutoUpdater.NET 是一款用于WPF、Winform软件版本更新的框架,类似框架还有Squirrel、WinSparkle、NetSparkle、Google Omaha。 一、安装AutoUpdater.NET 首先,您需要在项目中安装AutoUpdater.NET库。您可以通过NuGet包管理器来安装它。在Visual Studio中…...

108. UE5 GAS RPG 实现地图名称更新和加载关卡

在这一篇里,我们将实现对存档的删除功能,在删除时会有弹框确认。接着实现获取玩家的等级和地图名称和存档位置,我们可以通过存档进入游戏,玩家在游戏中可以在存档点存储存档。 实现删除存档 删除存档需要一个弹框确认&#xff0…...

对称加密与非对称加密:密码学的基石及 RSA 算法详解

对称加密与非对称加密:密码学的基石及 RSA 算法详解 在当今数字化的时代,信息安全至关重要。对称加密和非对称加密作为密码学中的两种基本加密技术,为我们的数据安全提供了强大的保障。本文将深入探讨对称加密和非对称加密的特点、应用场景&…...

排列问题方法总结(递归+迭代)

递归 一、逐步生成结果法&#xff08;无序&#xff09; #include<iostream> #include<vector> #include<string> #include<algorithm>using namespace std;vector<string> GetChild(int n,int curIndex){vector<string> now;vector&…...

C#从入门到放弃

C#和.NET的区别 C# C#是一个编程语言 .NET .NET是一个在window下创建程序的框架 .NET框架不仅局限于C#,它还可以支持很多语言 .NET包括了2个组件&#xff0c;一个叫CLR(通用语言运行时)&#xff0c;另一个是用来构建程序的类库 CLR 用C写一个程序&#xff0c;在一台8688的机器…...

视频质量评价学习笔记

目录 MD VQA:大淘宝团队&#xff1a; ReIQA KVQ 视频质量评价学习笔记 MD VQA:大淘宝团队&#xff1a; https://github.com/kunyou99/MD-VQA_cvpr2023?tabreadme-ov-file ReIQA GitHub - avinabsaha/ReIQA: Official implementation for CVPR2023 Paper "Re-IQA : U…...

OpenCV、YOLO、VOC、COCO之间的关系和区别

OpenCV、YOLO、COCO 和 VOC 是计算机视觉和深度学习领域常见的几个名词&#xff0c;它们分别代表不同的工具、算法和数据集&#xff0c;之间有一些联系和区别。下面分别说明它们的定义、用途以及相互关系。 1. OpenCV&#xff08;Open Source Computer Vision Library&#xf…...

Pandas进行周期与时间戳转换

时间序列数据在数据分析和金融领域非常常见,处理这些数据时,通常会面临周期(Period)与时间戳(Timestamp)之间的转换需求。理解和掌握这种转换,对于时间序列数据的清洗、预处理以及进一步分析至关重要。Python 中的 pandas 库提供了一系列便捷的函数来帮助处理这些时间序…...

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Get Simpsonized主要功能适用场景优点缺点使用方式 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 指令保护和安全规则&…...

概率论公式整理

1 概率 古典概型和几何概型 古典概型&#xff08;有限等可能&#xff09;几何概型&#xff08;无限等可能&#xff09; 条件概率 P ( A ∣ B ) P ( A B ) P ( B ) P(A|B) \frac{P(AB)}{P(B)} P(A∣B)P(B)P(AB)​ 全概率公式 P ( B ) ∑ i 1 n P ( A i ) P ( B ∣ A i ) P…...

【C++】—— stack和queue的模拟实现

前言 ​ stack 和 queue使用起来都非常简单&#xff0c;现在来模拟实现一下&#xff0c;理解其底层的原理。 ​ 在实现之前&#xff0c;应该知道&#xff0c;stack 和 queue 都是容器适配器&#xff0c;通过看官网文件也可以看出来&#xff1b;其默认的容器都是deque&#xff…...

管家婆工贸ERP BR039.采购订单关联MRP明细表

最低适用版本&#xff1a; 工贸系列 23.8 插件简要功能说明&#xff1a; 采购订单明细表&#xff0c;支持显示采购订单明细上游请购单明细关联的MRP中对应销售订单明细产成品相关信息更多细节描述见下方详细文档 插件操作视频&#xff1a; 进销存类定制插件--采购订单关联M…...

SwanLab安装教程

SwanLab是一款开源、轻量级的AI实验跟踪工具&#xff0c;提供了一个跟踪、比较、和协作实验的平台&#xff0c;旨在加速AI研发团队100倍的研发效率。 其提供了友好的API和漂亮的界面&#xff0c;结合了超参数跟踪、指标记录、在线协作、实验链接分享、实时消息通知等功能&…...

MySQL EXPLAIN,数据库调优的秘密通道

EXPLAIN 是 MySQL 中一个非常有用的工具&#xff0c;它用于分析 SQL 查询的执行计划。通过 EXPLAIN&#xff0c;你可以获取 MySQL 是如何准备执行你的 SQL 语句的&#xff0c;包括使用的索引、连接类型、扫描的行数等信息。这些信息对于优化查询性能、识别性能瓶颈至关重要。 使…...

利用redis的key失效监听器KeyExpirationEventMessageListener作任务定时提醒功能

某需求&#xff1a; 要求在任务截止日期的前3天时&#xff0c;系统自动给用户发一条消息提醒。 用定时任务的话感觉很不舒服。间隔时间不好弄。不能精准卡到那个点。 由于系统简单&#xff0c;没有使用消息列队&#xff0c;也不能使用延时队列来做。 用Timer的话开销还挺大的&a…...

SFT别急着接RL!你的多模态大模型可能一直在“带伤训练”

PRISM团队 投稿量子位 | 公众号 QbitAISFT之后&#xff0c;直接上强化学习就够了吗&#xff1f;小心&#xff0c;你做的可能不是“训练”&#xff0c;而是“还债”。在多模态大模型&#xff08;MLLM&#xff09;的后训练中&#xff0c;行业内长期遵循着一个看似天经地义的范式&…...

Python异步编程与Discord机器人开发:pincer库实战指南

1. 项目概述与核心价值最近在折腾一个游戏服务器的后端&#xff0c;发现处理实时通信和状态同步这块儿&#xff0c;用传统的HTTP轮询或者WebSocket裸写&#xff0c;代码很快就变得又臭又长&#xff0c;维护起来简直是噩梦。就在我头疼的时候&#xff0c;社区里一个叫pincer的项…...

CST 2023 GPU加速实战:从硬件选型到性能验证,一份给仿真工程师的避坑清单

CST 2023 GPU加速实战&#xff1a;从硬件选型到性能验证&#xff0c;一份给仿真工程师的避坑清单 当电磁仿真项目规模从实验室级别扩展到工业级应用时&#xff0c;计算资源的需求往往呈指数级增长。我曾见证过一个汽车雷达天线阵列的仿真案例&#xff1a;采用传统CPU计算需要72…...

Arm Neoverse N3核心RAS架构与错误处理机制解析

1. Arm Neoverse N3核心的RAS架构解析 在服务器级处理器设计中&#xff0c;可靠性(Reliability)、可用性(Availability)和可维护性(Serviceability)构成了RAS技术的三大支柱。Arm Neoverse N3作为面向基础设施的核心设计&#xff0c;其RAS机制通过硬件级错误检测、记录和恢复功…...

Unity游戏接入TapTap登录,从后台配置到打包上线的完整避坑指南

Unity游戏接入TapTap登录的全流程避坑指南&#xff1a;从配置到上线的实战经验 在独立游戏开发领域&#xff0c;TapTap平台凭借其庞大的用户基础和便捷的登录系统&#xff0c;已成为许多开发者的首选接入方案。然而&#xff0c;从后台配置到最终打包上线的完整流程中&#xff0…...

告别showSoftInput失效:一文读懂Android 11+的WindowInsetsController输入法控制

Android输入法控制演进&#xff1a;从InputMethodManager到WindowInsetsController的深度解析 在移动应用开发中&#xff0c;输入法交互是最基础却又最容易被忽视的细节之一。许多开发者都曾遇到过这样的场景&#xff1a;精心设计的登录界面&#xff0c;光标在输入框闪烁&#…...

如何用PCL2启动器打造完美的Minecraft模组体验:从零到精通的完整指南

如何用PCL2启动器打造完美的Minecraft模组体验&#xff1a;从零到精通的完整指南 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher&#xff08;PCL&#xff09;。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 你是否厌倦了每次启动Minecraft都要手动配…...

城通网盘高速解析终极指南:如何免费实现40倍下载提速

城通网盘高速解析终极指南&#xff1a;如何免费实现40倍下载提速 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否厌倦了城通网盘那令人抓狂的蜗牛下载速度&#xff1f;每次下载大文件都要面对漫长…...

Claude API企业准入最后窗口期:2024Q3起强制启用OAuth 2.1+硬件级密钥绑定,现在不升级将无法续签

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude API企业准入政策的演进与合规紧迫性 随着Anthropic对Claude模型商用边界的持续收束&#xff0c;企业级API接入正从“技术可用性”转向“治理可验证性”。2024年Q2起&#xff0c;所有新注册企业账…...

从分布式到可分发:大规模软件制品分发架构设计与实践

1. 项目概述&#xff1a;从“分布式”到“可分发”的思维跃迁最近在梳理团队内部的基础设施时&#xff0c;又翻出了distr-sh/distr这个项目。说实话&#xff0c;第一次看到这个仓库名&#xff0c;我下意识地把它归类为又一个“分布式系统”框架。但当我真正点进去&#xff0c;花…...