python实现stream流式传输,边生成,边返回给客户端

该文章展示了一段Python服务器代码,利用Flask框架创建一个HTTPGET接口/stream,该接口启动一个新线程不断更新数组并生成流内容。生成器函数`generate_arr`用于迭代数组并延迟2秒,确保数据流间隔。客户端通过requests库以流模式获取响应内容,逐块处理。

服务器代码

import threading
import time
from typing import Generator

from flask import Flask, Response, stream_with_context

app = Flask(__name__)
arr = []

def append_item(num):
while True:
num += 1
print("append_item", num)
arr.append(num)
time.sleep(1)


def generate_arr(g_arr) -> Generator:
while True:
for i in g_arr:
print(str(i))
yield str(i)
time.sleep(2)

@app.route('/stream', methods=['GET'])
def stream():

# 这里要再开一个线程,才不会阻塞主进程传输数据
append_item_thread = threading.Thread(target=append_item, kwargs={"num": 0})
append_item_thread.start()
return Response(stream_with_context(generate_arr(arr)),content_type='application/octet-stream')

if __name__ == "__main__":
app.run(port=5005)

客户端请求代码 

import requests

url = 'http://localhost:5005/stream'

response = requests.get(url, stream=True)
# chunk_size每次返回块的大小
for chunk in response.iter_content(chunk_size=5):
if chunk:
print(chunk.decode())

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值