python多线程:各线程的输出在控制台中同一行原因分析

代码例子

import threading
import time

def error_worker():
    print("子线程开始")
    time.sleep(1)
    raise Exception("子线程出错了!")

t = threading.Thread(target=error_worker)
t.start()

print("主线程继续执行,不受子线程异常影响")
time.sleep(3)
print("主线程结束")

控制台输出如下图
在这里插入图片描述

原因

根本原因:标准输出(stdout)不是线程安全的
(1)多个线程共享控制台输出当多个线程同时调用 print() 时,它们实际上是在竞争同一个控制台输出资源。
(2)输出操作不是原子的print() 内部包含多个步骤(格式化字符串、写入缓冲区、刷新到终端),这些步骤可能被其他线程打断。
(3)GIL 不保证输出完整性虽然 Python 的全局解释器锁(GIL)确保同一时间只有一个线程执行字节码,但 print() 涉及系统调用,可能在执行期间释放 GIL,允许其他线程插入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值