代码例子
import threading
import timedef 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,允许其他线程插入