Python By David

Python 多執行緒 vs. 多進程:GIL 的影響與選擇

突破效能瓶頸的關鍵

Python 的全域直譯器鎖 (GIL) 限制了同一時間只能有一個執行緒在執行 Bytecode,這導致 Multi-threading 無法利用多核 CPU 加速 CPU 密集型任務。

選擇指南

  • I/O 密集型 (爬蟲、API 請求):瓶頸在網路等待。使用 threading 模組或 asyncio 效果極佳,因為等待 I/O 時 GIL 會釋放。
  • CPU 密集型 (影像處理、數據運算):瓶頸在運算。必須使用 multiprocessing 模組,它會建立多個 Process (每個都有獨立的 Python 解譯器和記憶體空間),避開 GIL 限制,真正利用多核心。

在做大量數據清洗或回測時,改用 ProcessPoolExecutor 往往能帶來數倍的效能提升。