python flask 如何实现stream传输,类似chatgpt那样的?

作者站长头像
站长
· 阅读数 10

请问如何实现边生成边传输?网上查到的代码如下:

from time import sleep
from flask import Flask, Response, stream_with_context

app = Flask(__name__)

@app.route('/stream', methods=['GET'])
def stream():
    def generate():
        for i in range(1, 21):
            print(i)
            yield f'This is item {i}\n'  # 生成流数据
            # 在生成每个数据项后可以添加一些适当的延时或其他逻辑
            sleep(0.5)

    return Response(generate(),
                    mimetype='text/plain')


if __name__ == '__main__':
    app.run(debug=True)

这个效果不对, 上面的代码会等待generate()结束才开始浏览器才显示文本.我希望是能一边执行一边返回

回复
1个回答
avatar
test
2024-07-02

好好看文档哦 https://flask.palletsprojects.com/en/2.1.x/patterns/streaming/

from flask import stream_with_context, request

@app.route('/stream')
def streamed_response():
    def generate():
        yield 'Hello '
        yield request.args['name']
        yield '!'
    return app.response_class(stream_with_context(generate()))
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容