Python 3.13 最近剛發布,具有一個令人驚嘆的新功能,稱為「自由執行緒模式」。當您使用線程時,這對於程式碼的效能來說是一個很大的改進。本文展示如何啟用此功能(預設不啟用)並展示「自由執行緒模式」對程式碼效能的影響。
對於 Windows 和 MacOS 用戶,只需從 Python 網站下載最新的安裝程式即可。當您安裝Python時,當您選擇「自訂安裝」選項時,會有一個啟用「自由執行緒模式」的複選框。
對於 Ubuntu 用戶,您可以透過在終端機中執行以下命令來啟用此功能:
sudo add-apt-repository ppa:deadsnakes sudo apt-get update sudo apt-get install python3.13-nogil
安裝套件後,您可以使用 python3.13(原始)和 python3.13-nogil 或 python3.13t(免費線程 Python)運行程式碼。
請參閱這篇文章,以了解有關如何在 Linux 發行版上安裝 Python 3.13 實驗版的更多詳細資訊。
要驗證您的 Python 是否啟用了“自由執行緒模式”,您可以使用以下命令:
python3.13t -VV Python 3.13.0 experimental free-threading build (main, Oct 8 2024, 08:51:28) [GCC 11.4.0]
讓我們看看自由執行緒模式對下面簡單程式碼的影響:
import sys import threading import time print("Python version : ", sys.version) def worker(): sum = 0 for i in range(10000000): sum += i n_worker = 5 # Single thread start = time.perf_counter() for i in range(n_worker): worker() print("Single Thread: ", time.perf_counter() - start, "seconds") # Multi thread start = time.perf_counter() threads = [] for i in range(n_worker): t = threading.Thread(target=worker) threads.append(t) t.start() for t in threads: t.join() print("Multi Thread: ", time.perf_counter() - start, "seconds")
稍後,我將使用普通 Python(python3.13 二進位檔案)和免費線程 Python(pypy3.13t 二進位檔案)運行此程式碼。
首先,使用python3.13運行測試:
python3.13 gil_test.py Python version : 3.13.0 (main, Oct 8 2024, 08:51:28) [GCC 11.4.0] Single Thread: 1.4370562601834536 seconds Multi Thread: 1.3681392602156848 seconds
然後,使用 pypy3.13t 執行測試:
python3.13t gil_test.py Python version : 3.13.0 experimental free-threading build (main, Oct 8 2024, 08:51:28) [GCC 11.4.0] Single Thread: 1.862126287072897 seconds Multi Thread: 0.3931183419190347 seconds
我也嘗試使用 python3.11:
python3.11 gil_test.py Python version : 3.11.3 (main, Apr 25 2023, 16:40:23) [GCC 11.3.0] Single Thread: 1.753435204969719 seconds Multi Thread: 1.457715731114149 seconds
Python預設有GIL(Global Interpreter Lock)鎖定機制,使得多執行緒其實並不是並行的。可以看到單線程的時間處理和多線程類似。
使用python3.11t(自由執行緒模式),多執行緒效能比單執行緒快很多。所以,多執行緒現在實際上是並行的。
但是,你有沒有發現 python3.13t 中的單執行緒測驗比 pypy3.13 慢一點?
我不太明白為什麼,所以如果你有任何解釋請告訴我。
我認為在python中使用多執行緒進行並行處理是很好的。但是,如果沒有GIL鎖定機制,則需要開發人員注意“線程安全”,即。在執行緒之間共享資料。
此外,我們需要等待函式庫和套件更新才能完全支援自由執行緒模式。這就是為什麼現在預設不啟用“自由線程模式”的原因之一。但是,我認為這將是未來的一個很好的功能。
以上是PythonGIL 中的自由線程模式已停用)的詳細內容。更多資訊請關注PHP中文網其他相關文章!