与 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 (启用):
python3 -X gil=0 sample.py
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 多进程任务的情况下我们可以看到相当大的性能差异。
1
C5H12O5 86 天前
‘单线程和多线程之间的差异并不大,但在多进程任务的情况下我们可以看到相当大的差异。’
多线程和多进程写反了吧 |
2
djangovcps 86 天前
2 个月前就看到这篇文章了,你抄也抄的快点吧。
|
3
GeekGao OP @djangovcps 梦里看到这篇文章? 你点进去看看日期吧,或者自行 google
|
4
GeekGao OP @C5H12O5 没有,先是对比有 GIL 的 Python3.12 下:
Single-threaded time taken: 9.04 seconds Multi-threaded time taken : 8.21 seconds 差异不大。 |
5
yu1miao 86 天前
这么快?我记得官方不是说要花几年时间么
|
7
xiaogu2014 86 天前
```可以看到,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 你说的和你跑的结果大相径庭。。 |
8
GeekGao OP @xiaogu2014 没看懂你的意思, 上面两组结果这分别是 3.12 与 3.13b 的比较。 但是主题目的是比较 Multi-threaded time taken 提升情况。而非 Multi-process
我突然似乎发现 最后一句话有歧义,“Multi-threaded 多进程任务的情况下我们可以看到相当大的性能差异。” 改成 两个版本的 Multi-threaded 任务比较我们可以看到相当大的性能差异 |
9
pollux 86 天前
嗯,确实是写错了,Multi-threaded 本身就是多线程的意思。-》
''' 可以看到,Multi-threaded __多线程__ 任务的情况下我们可以看到相当大的性能差异。 ''' |
10
Sawyerhou 86 天前
总的来说,是个好消息,起了个好头。
|
12
XinPingQiHe 81 天前
期待性能突破!
|
13
Maerd 79 天前
一些锁的细粒度还是太高,最大的问题是现在多线程还没有实现延迟 gc ,导致 nogil 的单线程性能爆降,不过 pep 也说明了这个至少也要 5 年左右才能用,现在才算刚起步,也算起了个好头
|