當前位置: 華文世界 > 科技

體驗無GIL的自由執行緒Python:Python 3.13 新特征之一

2024-10-06科技

全域直譯器鎖(GIL,Global Interpreter Lock)是 Python 中備受爭議的特性之一。它的主要作用是確保 Python 是一種執行緒安全的程式語言,防止多個執行緒同時存取和修改同一塊記憶體。然而,這也嚴重限制了 Python 的多執行緒效能。盡管 GIL 能夠保證執行緒安全,但代價是幾乎所有的多執行緒 Python 程式都像單執行緒程式一樣執行,使得 CPU 密集型計算任務無法充分利用多核 CPU 的優勢。

自由執行緒版(Free-Threaded)Python 將成為 Python 3.13 中的一項重大更新。這次更新為 Python 基金會鋪平了道路,最終使 GIL(全域直譯器鎖)成為可選項。

Python 3.13 的預釋出版本已於 2024 年 10 月 1 日釋出,官方版本計劃於 2024 年 10 月 7 日正式釋出。此次更新允許我們輕松設定自由執行緒的 Python,操作過程十分簡單。接下來,我們將在 Windows 下體驗 python-3.13.0rc3-amd64 版本所帶來的無 GIL 自由執行緒效率提升。

下載 Python 3.13 的 Windows 安裝程式

下載地址:https://www.python.org/downloads/release/python-3130rc3/ 。下載Python 3.13.0rc3 的Windows installer (64-bit)安裝程式。

自訂安裝

執行安裝程式,點選「自訂安裝」:

在" Advanced Options" 下,確保選擇「 Download free-threaded binaries(experimental) 」選項,然後點選「安裝」。

安裝完成後,在安裝目錄下回有一個python3.13t.exe 的程式,這個就是無GIL 自由執行緒版本的入口。

測試多執行緒

下面程式碼建立並啟動四個執行緒以並列執行一個模擬 CPU 密集任務的函數,並計算完成所有任務所需的總時間。

import threadingimport time# 一個計算密集型函數,用於模擬 CPU 密集任務def cpu_bound_task(): start = time.time() count = 100 for _ in range(10**8): count /= 2 end = time.time() print(f"Task completed in: {end - start:.2f} seconds")# 建立四個執行緒來並列執行 CPU 密集任務thread1 = threading.Thread(target=cpu_bound_task)thread2 = threading.Thread(target=cpu_bound_task)thread3 = threading.Thread(target=cpu_bound_task)thread4 = threading.Thread(target=cpu_bound_task)start_time = time.time()# 啟動執行緒thread1.start()thread2.start()thread3.start()thread4.start()# 等待兩個執行緒完成thread1.join()thread2.join()thread3.join()thread4.join()total_time = time.time() - start_timeprint(f"Total time taken: {total_time:.2f} seconds")

分別使用python 3.11.5、python3.13..0rc3 和 python3.13t.exe(Python 3.13.0rc3 experimental free-threading)(無GIL自由執行緒版)測試,無GIL python 執行多執行緒cpu密集計算的效率大大提升cpu 發揮率,計算時間減少2倍多。

D:\PythonEnv_New\python3.13>..\python.exe --versionPython 3.11.5D:\PythonEnv_New\python3.13>..\python.exe multi_threaded.pyTask completed in: 19.49 secondsTask completed in: 19.97 secondsTask completed in: 19.79 secondsTask completed in: 20.62 secondsTotal time taken: 20.65 seconds(base) D:\PythonEnv_New\python3.13>python.exe --versionPython 3.13.0rc3(base) D:\PythonEnv_New\python3.13>python.exe multi_threaded.pyTask completed in: 19.06 secondsTask completed in: 19.36 secondsTask completed in: 19.48 secondsTask completed in: 19.34 secondsTotal time taken: 19.55 seconds(base) D:\PythonEnv_New\python3.13>python3.13t.exePython 3.13.0rc3 experimental free-threading build (tags/v3.13.0rc3:fae84c7, Oct 1 2024, 03:09:46) [MSC v.1941 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit(base) D:\PythonEnv_New\python3.13>python3.13t.exe multi_threaded.pyTask completed in: 7.14 secondsTask completed in: 7.28 secondsTask completed in: 7.33 secondsTask completed in: 7.46 secondsTotal time taken: 7.46 seconds

Python 3.13 的自由執行緒版(無 GIL)將顯著提升 CPU 密集型任務的多執行緒效能,測試結果顯示其計算時間減少了超過兩倍,相比於 Python 3.11.5 和普通的 Python 3.13 版本,效率大幅提升。

python 53

python · 目錄

上一篇 一文帶您了解Python中最難理解的7個概念