10月7日Python 3.14正式版发布,这一次Python进行了重大更新,本次更新最大的亮点是对自由线程的支持,正式撤销了全局锁,如何使用以及效果如何?
1)源码编译安装,当从源码构建 CPython 时,应使用 --disable-gil 配置选项以构建自由线程 Python 解释器
2)conda命令安装:conda create -n name python-freethreading
3)uv命令安装:uv venv --python 3.14t
目前使用命令安装方式超级简单。
要判断当前解释器是否支持自由线程,可检查 python -VV 和 sys.version 是否包含 "free-threading build"。 新的 sys._is_gil_enabled() 函数可用于检查在运行进程中 GIL 是否的确 被关闭。
CPython 的自由线程构建版支持在运行时使用环境变量 PYTHON_GIL 或命令行选项 -X gil 选择性地启用 GIL。GIL 也可能在导入未显式标记为支持自由线程模式的 C-API 扩展模块时被自动启用。 在这种情况下将会打印一条警告。
本文使用的cpu信息:i7-12700kf (12核,该CPU由8个大核和4个小核构成),编写的简单测试程序如下:
import sys
import threading
import time
print(sys._is_gil_enabled())
def task(num):
print(f"start task_{num}")
for i in range(500000000):
pass # 简单模拟计算任务
print(f"finish task_{num}")
# 针对每个任务启动线程
threads = []
for index in range(20):
# 使用 `args` 传入位置参数并使用 `kwargs` 传入关键字参数
t = threading.Thread(target=task, args=(index,),)
threads.append(t)
start_time = time.time()
# 启动每个线程
for t in threads:
t.start()
# 等待所有线程结束
for t in threads:
t.join()
delay = time.time() - start_time
print(delay)测试结果如下:
版本 | CPU利用率 | CPU温度 | 运行时间 |
3.14 GIL | 8% | 50度-56度 | 136.40秒 |
3.14 no GIL | 100% | 90度-95度 | 15.69秒 |
加速比:8.69 |
测试结果可以看出,CPU得到了充分利用,CPU温度也是超级高,加速比为8.69:1,不再是一个人干活其它人围观,而是大家一起干活干得满头大汗。
提议尽可能使用 threading.Lock 或其他同步的原语。
目前已经有许多第三库更新了对自由线程的支持,还有大量的第三方库正在更新,目前官方文档已提供第三方库对自由线程的更新追踪。
Python撤销GIL后可以把CPU资源完全利用起来,尽管功耗大幅度升高,不过性能提升也超级明显,加速比大致为N:1(N为CPU核心数),许多场合可以通过堆CPU核心的方式达到快速解决当前问题得目的。在生态问题上,社区对撤销GIL苦盼已久,新版本刚一发布许多第三方库就发布对自由线程的支持。未来,Python的自由线程会有广阔的发展空间。