Flask——基于python完整实现客户端和服务器后端流式请求及响应

文章目录

    • 本地客户端
    • Flask服务器后端
    • 客户端/服务器端流式接收[打字机]效果

看了很多相关博客,但是都没有本地客户端和服务器后端的完整代码示例,有的也只说了如何流式获取后端结果,基本没有讲两端如何同时实现流式输入输出,特此整理总结,给大家交流学习和使用!

本地客户端

  • requests.post得到流式回复的重要参数:
    • stream:需要设置为True;
    • response.iter_content:使用该函数接收返回的流式数据。
import requests
import time
import jsondef generate_stream_data():# 假设这是要发送的文本列表is_end = Falselines = ["Hello", "world", "this", "is", "a", "stream", "of", "text"]for line in lines:print(line)if lines.index(line) == len(lines) - 1:is_end = Trueyield json.dumps({'line': line, 'is_end': is_end}) + '\n'time.sleep(0.5)# 模拟数据处理时间def get_stream_response(response):# 流式接收responserec_data_list = []temp_data = ''for chunk in response.iter_content(chunk_size=1):temp_data += chunk.decode('utf-8')if temp_data.endswith('\n'):temp_json = json.loads(temp_data)rec_data_list.append(temp_json)print(temp_data)temp_data = ''if temp_json['is_end']:breakprint(rec_data_list)print("----------------------------")print(temp_data)return rec_data_listdef stream_upload(url):# 流式接收responseresponse = requests.post(url, data=generate_stream_data(), stream=True)final_response = get_stream_response(response)return final_responseurl = 'http://127.0.0.1:5000/stream'
response = stream_upload(url)

Flask服务器后端

  • flask.request流式获取数据::
    • 使用request.stream.read读取数据,而不是get_data()等一次性函数。
from flask import Flask, Response, request
import time
import json
import requestsapp = Flask(__name__)def process_stream_data(stream_data):# 假设这是要发送的数据print("开始生成新的数据流")is_end = Falseprint(stream_data)for idx, line in enumerate(stream_data):if idx == len(stream_data)-1:is_end = Trueprint(line)yield json.dumps(line)+"\n"time.sleep(0.5)# 模拟数据处理时间def get_stream_request(chunk_size=1):req_data_list = []temp_data = ''while True:chunk = request.stream.read(chunk_size)temp_data += chunk.decode('utf-8')if temp_data.endswith('\n'):temp_json = json.loads(temp_data)req_data_list.append(temp_json)print(temp_data)temp_data = ''if temp_json['is_end']:return req_data_list@app.route('/stream', methods=['POST'])
def stream_text():data = get_stream_request()print("----------------------------")return Response(process_stream_data(data))if __name__ == "__main__":app.run(host='0.0.0.0', port=5000, debug=True)

客户端/服务器端流式接收[打字机]效果

请添加图片描述

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

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

相关文章

C++字符串类

C中有两种主要的字符串类&#xff1a;std::string 和 std::wstring。 std::string std::string 是 C 标准库中用于处理 ASCII 字符串的类。它提供了丰富的方法来操作字符串&#xff0c;包括插入、删除、查找子串、比较等功能。使用 std::string 需要包含头文件 <string>…

8.CSS层叠继承规则总结

CSS 层叠继承规则总结 经典真题 请简述一下 CSS 中的层叠规则 CSS 中的层叠继承规则 在前面《CSS属性的计算过程》中&#xff0c;我们介绍了每一个元素都有都有所有的属性&#xff0c;每一个属性都会通过一系列的计算过程得到最终的值。 这里来回顾一下计算过程&#xff0…

Node.js中如何处理异步编程

在Node.js中&#xff0c;处理异步编程是至关重要的技能。由于Node.js的单线程执行模型&#xff0c;异步编程可以极大地提高程序的性能和响应速度。本文将介绍几种常见的异步编程处理方式&#xff0c;并附上示例代码&#xff0c;帮助您更好地理解和应用异步编程技术。 回调函数…

家政小程序开发,引领家庭服务新时代的科技革命

随着科技的飞速发展&#xff0c;人们的生活方式正在发生深刻的变化。其中&#xff0c;家政服务作为日常生活的重要组成部分&#xff0c;也在经历着一场由小程序技术引领的科技革命。本文将探讨家政小程序的发展趋势、功能特点以及对家庭服务的深远影响。 一、家政小程序的发展…

Linux命令-chattr命令(用来改变文件属性)

说明 chattr命令 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性&#xff0c;这些属 性共有以下8种模式。 语法 chattr(选项)选项 a&#xff1a;让文件或目录仅供附加用途&#xff1b; b&#xff1a;不更新文件或目录的最后存取时间&#xff1b; c…

NFTScan Labs,一个聚焦在 NFT 领域的开发者组织

NFTScan Labs 是一个聚焦在 NFT 领域的开发者组织&#xff0c;成立于 2021 年 3 月份。NFTScan Labs 核心成员从 2016 年开始涉足区块链领域&#xff0c;有多年开发经验和前沿行业认知&#xff0c;对加密钱包、区块链安全、链上数据追踪、DeFi、预言机、NFT 等领域有深入的研究…

2/22作业

1.按位置插入 void insert_pos(seq_p L,datetype value,int pos) { if(LNULL) { printf("入参为空\n"); return; } if(seq_full(L)) { printf("表已满\n"); return; } if(pos>L->len|…

Jenkins的使用GIT(4)

Jenkins的使用GIT 20211002 我们使用 Jenkins 集成外部 Git 仓库&#xff0c;实现对真实代码的拉取和构建。在这里&#xff0c;我们选用 Coding/Github/Gitee 等都可以作为我们的代码源 1 生成公钥私钥 首先&#xff0c;我们先来配置公钥和私钥。这是 Jenkins 访问 Git 私有库…

【nvm】下载安装及使用(包含windows和Linux)

目录 1、Windows版本下载及安装 2、Linux下载及安装 下载 安装 3、使用 在不借助第三方工具的情况下切换node版本&#xff0c;只能卸载现有版本&#xff0c;安装需要的版本&#xff0c;这样显然很麻烦。而nvm就很好的帮我们解决了这个问题。 nvm&#xff08;node.js vers…

QT中调用python

一.概述 1.Python功能强大&#xff0c;很多Qt或者c/c开发不方便的功能可以由Python编码开发&#xff0c;尤其是一些算法库的应用上&#xff0c;然后Qt调用Python。 2.在Qt调用Python的过程中&#xff0c;必须要安装python环境&#xff0c;并且Qt Creator中编译器与Python的版…

OpenCV:计算机视觉领域的瑞士军刀

摘要 本文将深入探索OpenCV&#xff08;开源计算机视觉库&#xff09;的基本概念、应用领域、主要功能和未来发展。通过本文&#xff0c;读者将能够理解OpenCV在计算机视觉中的重要性&#xff0c;并掌握其基本使用方法。 一、引言 随着人工智能和机器学习技术的飞速发展&…

IDEA启动Springboot报错:无效的目标发行版:17 的解决办法

无效的目标发行版&#xff1a;17 的解决办法 一般有两个原因&#xff0c;一可能是本地没有安装JDK17&#xff0c;需要安装后然后在IDEA中选择对应版本&#xff1b;二可能是因为IDEA版本太低&#xff0c;不支持17&#xff0c;需要升级IDEA版本。然后在File->Project Struct…

未雨绸缪,才是真正的高手

由于电脑用了五年半&#xff0c;刚换了新型电脑主机&#xff0c;人老了摸索掌握新操作方法较困难&#xff0c;所以今天的网文作业只好从简&#xff0c;即本“人民体验官”推广人民日报官方微博文化产品《夜读&#xff1a;真正的高手&#xff0c;都懂得凡事提前一步》。 图&…

Flutter常用命令,持续更新

目录 前言 Flutter 常用命令 Dart 常用命令 adb 常用命令&#xff08;用于 Android 开发&#xff09; 前言 当在开发Flutter项目时&#xff0c;熟悉一些常用的命令是非常重要的。这些命令可以帮助你执行各种任务&#xff0c;从构建应用程序到调试和测试。以下是一些Flutte…

Draw.io | 强大并且免费的画图工具

前言 作为一个技术人&#xff0c;总是需要一个称手的画图工具&#xff0c;日常工作中&#xff0c;画的最多的图应该就是流程图&#xff0c;思维导图&#xff0c;如果开发时间比较久的话&#xff0c;可能还需要画架构图。刚开始的时候&#xff0c;我下载了各种工具&#xff0c;像…

Aigtek电压放大器的应用场合有哪些

电压放大器是一种主要用于信号处理的重要电子设备&#xff0c;它可以将输入的低电压信号放大到较高的输出电压水平。在各个应用领域中&#xff0c;电压放大器发挥着重要的作用。下面西安安泰点击将介绍电压放大器的应用场合。 通信系统&#xff1a;电压放大器在通信系统中具有重…

【打工日常】使用docker部署StackEdit编辑器-Markdown之利器

一、StackEdit介绍 StackEdit一款强大的在线Markdown编辑器&#xff0c;不仅具备卓越的写作功能&#xff0c;还支持实时预览、多设备同步等特性。 很多时候基于安全和信息保密的关系&#xff0c;建议放在自己的服务器或者本地linux去运行&#xff0c;这样会比较省心。 二、本次…

Nginx跳转模块location

一.location模块概述 1.定义 location块是server块的一个指令。作用&#xff1a;基于Nginx服务器接收到的请求字符串&#xff0c;虚拟主机名称&#xff08;ip&#xff0c;域名&#xff09;、url匹配&#xff0c;对特定请求进行处理。 2.三种匹配类别 精准匹配&#xff1a;l…

企业微信变更企业主体的流程

企业微信变更主体有什么作用&#xff1f;做过企业运营的小伙伴都知道&#xff0c;很多时候经常会遇到现有的企业需要注销&#xff0c;切换成新的企业进行经营的情况&#xff0c;但是原来企业申请的企业微信上面却积累了很多客户&#xff0c;肯定不能直接丢弃&#xff0c;所以这…

【Flink数据传输(一)】NetworkStack架构概述:实现tm之间的数据交换

文章目录 1. NetworkStack整体架构2. StreamTask内数据流转过程 NetworkStack提供了高效的网络I/O和反压控制 除了各个组件之间进行RPC通信之外&#xff0c;在Flink集群中TaskManager和TaskManager节点之间也会发生数据交换&#xff0c;尤其当用户提交的作业涉及Task实例运行在…