You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中无换行流式传输文本至客户端?

Flask流式传输无换行时无法实时返回的原因及实现方案

一、无换行时流式传输失效的原因

根源是WSGI服务器的输出缓冲机制:

  • Flask默认搭载的Werkzeug服务器(多数WSGI服务器都如此)会对响应内容做缓冲处理,以此减少网络IO次数、提升传输效率。
  • 对于文本类型的响应,服务器默认采用行缓冲策略:当输出内容包含换行符(\n)时,会立即刷新缓冲区并将内容发送给客户端;如果没有换行符,服务器会持续积攒内容,直到缓冲区填满(通常是KB级阈值)或整个响应结束,才会一次性推送所有内容。
  • 你测试中每次仅yield单个数字字符串,未触发行缓冲的刷新条件,导致服务器把所有内容攒到最后才发送,客户端自然要等完整响应生成才能收到数据。

二、实现无换行的Flask文本流式传输

完全可以实现,核心是强制关闭或绕过服务器的缓冲机制,以下是两种可靠方案:

方案1:开启响应的直接传递模式

通过设置Response对象的direct_passthrough为True,绕过Werkzeug的输出缓冲,让每一次yield的内容立即发送到客户端:

from flask import Flask, Response
import time

app = Flask(__name__)

@app.route('/test_streaming')
def test_streaming():
    def generate():
        for i in range(100):
            time.sleep(0.1)
            yield str(i)
    response = Response(generate(), mimetype='text/plain')
    # 关闭缓冲,直接传递内容
    response.direct_passthrough = True
    return response

方案2:关闭服务器调试模式

调试模式下Werkzeug会启用额外的缓冲优化,关闭后流式内容可实时传输:

if __name__ == '__main__':
    app.run(port=5001, debug=False)

客户端代码无需改动

你的requests测试代码已经正确设置stream=True,并通过iter_content()逐块读取,只要服务器端实时推送内容,客户端就能实时打印结果。

内容的提问来源于stack exchange,提问作者pmriolacci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:34:54