代碼例子
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,允許其他線程插入