llm 流式输出时 print 函数的参数 end 和 flush
print(content, end='', flush=True) 为什么要加参数 end 和 flush ?
在 Python 的 print() 函数中,end='' 和 flush=True 是实现流式文本(打字机效果)无缝实时输出的黄金组合。
它们各自的作用如下:
1. end='': 控制结尾字符(取消自动换行)
- 默认行为:Python 的
print()函数在打印完传入的文本后,默认会在最后加一个换行符\n。这就是为什么平时写多行print()时,内容会一行一行往下掉。 end=''的作用:将结尾默认的换行符\n替换为空字符串""(即什么都不加)。- 在流式传输中的效果:
- 当大模型返回碎片
chunk时(比如依次返回"佛"、"法"、"者"),如果不加end='':
佛
法
者
- 加了
end=''之后,后续打印的内容就会紧跟在前一个字符后面,拼接成无缝的一句话:
佛法者
2. flush=True: 强制清空输出缓冲区(立即刷到屏幕上)
这是最容易被忽视、但对流式输出至关重要的一点。
- 底层机制(为什么需要 Flush):
为了提高性能,操作系统的标准输出(sys.stdout)默认采用了缓冲区(Buffer)机制。
当你调用print()时,操作系统不会立刻把这几个字绘制到屏幕上,而是先把它存进内存的缓存区里。通常只有遇到换行符\n**或者缓冲区装满了**的时候,操作系统才会一次性把数据“掏出来”刷到屏幕上。 - 尴尬的问题:
我们在前面加了end='',取消了换行符\n!这会导致操作系统以为你还没写完,于是把模型传过来的每一个字都卡在缓冲区里不显示。直到大模型把几百字全部吐完(或者程序结束触发换行)时,屏幕才会“啪”的一下把所有字瞬间弹出来——这直接让流式打字机的效果失效了。 flush=True的作用:
flush的本义是“冲刷/清空”。它的作用是霸道地命令操作系统:“别管有没有换行,也别管缓冲区装满没装满,现在立刻把手里的这个字给我刷到屏幕上!”
💡 总结对比
| 参数 | 默认值 | 作用 | 不写它的后果 |
|---|---|---|---|
end |
'\n'(换行) |
决定打印完内容后接什么字符。设置 '' 保持在同一行。 |
模型返回的每一个字都会单独占一行(瀑布式刷屏)。 |
flush |
False(等待缓存) |
决定是否强行把缓冲区里的文本立刻推送到屏幕。 | 文本卡在缓冲区里,用户看到的仍然是“等半天然后瞬间弹出一大堆字”。 |
正是这两个参数结合,才让大模型传过来的每一个 chunk 增量,都能零延迟、无换行地像打字机一样呈现给用户!

浙公网安备 33010602011771号