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 往往能帶來數倍的效能提升。