GIL 在 Python 3.13 中成为可选

GeekGao · 2024-8-15 09:07:33 · 112 次点击
与 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
举报· 112 次点击
登录 注册 站外分享
8 条回复  
Maerd 小成 2024-8-22 17:27:14
一些锁的细粒度还是太高,最大的问题是现在多线程还没有实现延迟 gc ,导致 nogil 的单线程性能爆降,不过 pep 也说明了这个至少也要 5 年左右才能用,现在才算刚起步,也算起了个好头
XinPingQiHe 初学 2024-8-20 11:02:48
期待性能突破!
Sawyerhou 小成 2024-8-15 16:11:26
总的来说,是个好消息,起了个好头。
pollux 小成 2024-8-15 11:13:42
嗯,确实是写错了,Multi-threaded 本身就是多线程的意思。-》

'''
可以看到,Multi-threaded  __多线程__  任务的情况下我们可以看到相当大的性能差异。
'''
xiaogu2014 小成 2024-8-15 10:55:49
```可以看到,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


你说的和你跑的结果大相径庭。。
yu1miao 小成 2024-8-15 10:50:40
这么快?我记得官方不是说要花几年时间么
djangovcps 小成 2024-8-15 09:27:36
2 个月前就看到这篇文章了,你抄也抄的快点吧。
C5H12O5 小成 2024-8-15 09:24:52
‘单线程和多线程之间的差异并不大,但在多进程任务的情况下我们可以看到相当大的差异。’

多线程和多进程写反了吧
返回顶部