使用Flask框架构建实时流式数据传输,如同ChatGPT的即时响应
许多开发者希望在Flask应用中实现类似ChatGPT的实时响应效果:数据生成的同时即时传输给客户端。然而,简单的yield语句无法直接实现这一目标。本文深入探讨如何利用Flask框架高效实现这种流式传输。
问题在于,之前的代码片段虽然使用了yield关键字,但generate()函数执行完毕后才返回响应对象,导致浏览器必须等待整个生成过程结束后才能显示任何内容,与期望的实时响应效果相差甚远。
为了实现边生成边传输,我们需要借助Flask提供的stream_with_context函数。此函数确保生成器函数每次yield数据后,Flask立即将数据发送给客户端,无需等待生成器函数完全执行完毕。
改进后的代码如下:
from flask import stream_with_context, request@app.route('/stream')def streamed_response(): def generate(): yield 'Hello ' yield request.args.get('name', 'World') # 使用get方法避免KeyError yield '!' return app.response_class(stream_with_context(generate()))
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。