首頁 後端開發 Python教學 PythonGIL 中的自由線程模式已停用)

PythonGIL 中的自由線程模式已停用)

Oct 11, 2024 am 10:17 AM

Python 3.13 最近剛發布,具有一個令人驚嘆的新功能,稱為「自由執行緒模式」。當您使用線程時,這對於程式碼的效能來說是一個很大的改進。本文展示如何啟用此功能(預設不啟用)並展示「自由執行緒模式」對程式碼效能的影響。

安裝免費線程Python

Windows 和 MacOS 用戶

對於 Windows 和 MacOS 用戶,只需從 Python 網站下載最新的安裝程式即可。當您安裝Python時,當您選擇「自訂安裝」選項時,會有一個啟用「自由執行緒模式」的複選框。

Free Threaded Mode in PythonGIL disabled)

Ubuntu 用戶

對於 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]

自由線程模式效能

實驗設定

讓我們看看自由執行緒模式對下面簡單程式碼的影響:

  • 我有一個函數工作者,它執行一些計算並傳回 0 到 1000 萬之間的數字總和。
  • 我有「測試 1」來按順序運行工作函數 5 次。
  • 我有「測試 2」來使用多個執行緒並行運行工作函數,執行緒數為 5。
  • 我確實測量了這兩個測試的執行時間。
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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

如何從python中的unignts.txt文件安裝包裝 如何從python中的unignts.txt文件安裝包裝 Sep 18, 2025 am 04:24 AM

運行pipinstall-rrequirements.txt可安裝依賴包,建議先創建並激活虛擬環境以避免衝突,確保文件路徑正確且pip已更新,必要時使用--no-deps或--user等選項調整安裝行為。

PEFT LoRA適配器與基礎模型的高效合併策略 PEFT LoRA適配器與基礎模型的高效合併策略 Sep 19, 2025 pm 05:12 PM

本教程詳細介紹瞭如何將PEFT LoRA適配器與基礎模型高效合併,生成一個完全獨立的模型。文章指出直接使用transformers.AutoModel加載適配器並手動合併權重是錯誤的,並提供了使用peft庫中merge_and_unload方法的正確流程。此外,教程還強調了處理分詞器的重要性,並討論了PEFT版本兼容性問題及解決方案。

如何用Pytest測試Python代碼 如何用Pytest測試Python代碼 Sep 20, 2025 am 12:35 AM

Pytest是Python中簡單強大的測試工具,安裝後按命名規則自動發現測試文件。編寫以test_開頭的函數進行斷言測試,使用@pytest.fixture創建可複用的測試數據,通過pytest.raises驗證異常,支持運行指定測試和多種命令行選項,提升測試效率。

如何處理python中的命令行參數 如何處理python中的命令行參數 Sep 21, 2025 am 03:49 AM

theargparsemodulestherecommondedwaywaytohandlecommand-lineargumentsInpython,提供式刺激,typeValidation,helpmessages anderrornhandling; useSudys.argvforsimplecasesRequeRequeRingminimalSetup。

Python中浮點數精度問題及其高精度計算方案 Python中浮點數精度問題及其高精度計算方案 Sep 19, 2025 pm 05:57 PM

本文旨在探討Python及NumPy中浮點數計算精度不足的常見問題,解釋其根源在於標準64位浮點數的表示限制。針對需要更高精度的計算場景,文章將詳細介紹並對比mpmath、SymPy和gmpy等高精度數學庫的使用方法、特點及適用場景,幫助讀者選擇合適的工具來解決複雜的精度需求。

如何使用Python中的PDF文件 如何使用Python中的PDF文件 Sep 20, 2025 am 04:44 AM

PyPDF2、pdfplumber和FPDF是Python處理PDF的核心庫。使用PyPDF2可進行文本提取、合併、拆分及加密,如通過PdfReader讀取頁面並調用extract_text()獲取內容;pdfplumber更適合保留佈局的文本提取和表格識別,支持extract_tables()精準抓取表格數據;FPDF(推薦fpdf2)用於生成PDF,通過add_page()、set_font()和cell()構建文檔並輸出。合併PDF時,PdfWriter的append()方法可集成多個文件

如何使用Python中的@ContextManager Decorator創建上下文管理器? 如何使用Python中的@ContextManager Decorator創建上下文管理器? Sep 20, 2025 am 04:50 AM

Import@contextmanagerfromcontextlibanddefineageneratorfunctionthatyieldsexactlyonce,wherecodebeforeyieldactsasenterandcodeafteryield(preferablyinfinally)actsas__exit__.2.Usethefunctioninawithstatement,wheretheyieldedvalueisaccessibleviaas,andthesetup

python獲得當前時間示例 python獲得當前時間示例 Sep 15, 2025 am 02:32 AM

獲取當前時間在Python中可通過datetime模塊實現,1.使用datetime.now()獲取本地當前時間,2.用strftime("%Y-%m-%d%H:%M:%S")格式化輸出年月日時分秒,3.通過datetime.now().time()獲取僅時間部分,4.推薦使用datetime.now(timezone.utc)獲取UTC時間,避免使用已棄用的utcnow(),日常操作以datetime.now()結合格式化字符串即可滿足需求。

See all articles