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

Python多线程并发调用print()的实际运行机制是怎样的?

Python多线程下print输出异常的原因

print()函数向控制台输出的操作默认拆分为两个独立步骤:

  • 写入你传入的打印内容(比如示例中的y/x字符)
  • 自动追加写入换行符\n

这两步不属于原子操作,执行过程中可以被操作系统的线程调度打断,让其他线程先执行。

第一段无sleep的代码输出yx的原因

两个线程几乎同时启动:

  1. 线程y先拿到执行权,调用print("y")刚写完字符y,还没来得及写入对应的换行符,就被操作系统切换走,让出了执行权
  2. 线程x此时抢到执行权,调用print("x")先写入了字符x,之后两个线程再各自执行剩下的写换行符操作,最终两个字符就拼接在了同一行,输出yx。

第二段加sleep的代码正常换行的原因

启动y线程后加的0.001秒延迟,足够让y线程的print()两步操作全部执行完成(写完y和对应换行符),之后x线程才会启动执行自己的打印逻辑,所以输出就是各自独占一行的格式。

避免多线程打印混乱的方案

要保证多线程下每次打印的内容和换行绑定不被拆分,可以用两种方案:

  • 自定义线程锁,所有打印操作执行前先获取锁,执行完成后释放锁,保证每次只有一个线程在执行打印逻辑
  • Python 3.3及以上版本可以给print()加flush=True参数,能降低输出混乱的概率,不过最稳妥的方案还是加锁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:54:07