GIL 在 Python 3.13 中成为可选

35 天前
 GeekGao

与 Python 3.12 相比,Python 3.13 带来了主要的新功能,其中之一是自由线程模式,它禁用全局解释器锁,允许线程更多地并发运行。

这是一个实验性功能,如果您想尝试一下,可以从这里下载 Python 3.13 的测试版:https://www.python.org/downloads/release/python-3130b3/

当您使用--disable-gil 选项配置 Python 时,GIL 将被禁用,该选项只不过是安装时的构建配置(自由线程构建)。这将允许使用环境变量 PYTHON_GIL 选择性地启用和禁用 GIL ,该变量可以分别设置为 1 和 0 。 它还将提供命令行选项-X gil ,也可以将其设置为 0 (禁用)和 1 (启用):

v3.13

GIL disabled

python3 -X gil=0 sample.py

GIL enabled

python3 -X gil=1 sample.py

单线程和多线程之间的差异并不大,但在多进程任务的情况下我们可以看到相当大的差异。 使用 Python v3.12 ,GIL 运行 gil.py

python gil.py
Python version: 3.12.2 (tags/v3.12.2:6abddd9, Feb  6 2024, 21:26:36) [MSC v.1937 64 bit (AMD64)]
GIL cannot be disabled
Single-threaded: Factorial Computed.
Single-threaded time taken: 9.04 seconds
Multi-threaded: Factorial Computed.
Multi-threaded time taken : 8.21 seconds
Multi-process: Factorial Computed.
Multi-process time taken  : 5.64 seconds

Python 3.13 在没有 GIL 的情况下运行 gil.py

D:/SACHIN/Python13/python3.13t gil.py
Python version: 3.13.0b3 experimental free-threading build (tags/v3.13.0b3:7b41395, Jun 27 2024, 16:17:17) [MSC v.1940 64 bit (AMD64)]
GIL is disabled
Single-threaded: Factorial Computed.
Single-threaded time taken: 9.28 seconds
Multi-threaded: Factorial Computed.
Multi-threaded time taken : 4.86 seconds
Multi-process: Factorial Computed.
Multi-process time taken  : 6.14 seconds

可以看到,Multi-threaded 多进程任务的情况下我们可以看到相当大的性能差异。

Ref https://geekpython.in/gil-become-optional-in-python

2192 次点击
所在节点    Python
14 条回复
C5H12O5
35 天前
‘单线程和多线程之间的差异并不大,但在多进程任务的情况下我们可以看到相当大的差异。’

多线程和多进程写反了吧
djangovcps
35 天前
2 个月前就看到这篇文章了,你抄也抄的快点吧。
GeekGao
35 天前
@djangovcps 梦里看到这篇文章? 你点进去看看日期吧,或者自行 google
GeekGao
35 天前
@C5H12O5 没有,先是对比有 GIL 的 Python3.12 下:
Single-threaded time taken: 9.04 seconds
Multi-threaded time taken : 8.21 seconds

差异不大。
yu1miao
35 天前
这么快?我记得官方不是说要花几年时间么
GeekGao
35 天前
@yu1miao beta3 阶段嘛 ,beta4 之后才能定 ABI 。
xiaogu2014
35 天前
```可以看到,Multi-threaded 多进程任务的情况下我们可以看到相当大的性能差异。``
thread 是线程的意思

以及你的对比结果:
Multi-threaded time taken : 8.21 seconds
Multi-threaded time taken : 4.86 seconds

Multi-process time taken : 5.64 seconds
Multi-process time taken : 6.14 seconds


你说的和你跑的结果大相径庭。。
GeekGao
35 天前
@xiaogu2014 没看懂你的意思, 上面两组结果这分别是 3.12 与 3.13b 的比较。 但是主题目的是比较 Multi-threaded time taken 提升情况。而非 Multi-process

我突然似乎发现 最后一句话有歧义,“Multi-threaded 多进程任务的情况下我们可以看到相当大的性能差异。” 改成 两个版本的 Multi-threaded 任务比较我们可以看到相当大的性能差异
pollux
35 天前
嗯,确实是写错了,Multi-threaded 本身就是多线程的意思。-》

'''
可以看到,Multi-threaded __多线程__ 任务的情况下我们可以看到相当大的性能差异。
'''
Sawyerhou
35 天前
总的来说,是个好消息,起了个好头。
GeekGao
35 天前
@Sawyerhou 是的,GIL 仿佛就是个巨大的有色眼镜
XinPingQiHe
30 天前
期待性能突破!
Maerd
28 天前
一些锁的细粒度还是太高,最大的问题是现在多线程还没有实现延迟 gc ,导致 nogil 的单线程性能爆降,不过 pep 也说明了这个至少也要 5 年左右才能用,现在才算刚起步,也算起了个好头
GeekGao
28 天前
@Maerd 线程同步是个问题,估计一时半会儿也没啥好的方案,所以延迟 GC 的机制很难。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1065102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX