V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
GeekGao
V2EX  ›  Python

GIL 在 Python 3.13 中成为可选

  •  
  •   GeekGao · 100 天前 · 2530 次点击
    这是一个创建于 100 天前的主题,其中的信息可能已经有所发展或是发生改变。

    与 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

    14 条回复    2024-08-22 18:42:58 +08:00
    C5H12O5
        1
    C5H12O5  
       100 天前
    ‘单线程和多线程之间的差异并不大,但在多进程任务的情况下我们可以看到相当大的差异。’

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

    差异不大。
    yu1miao
        5
    yu1miao  
       100 天前
    这么快?我记得官方不是说要花几年时间么
    GeekGao
        6
    GeekGao  
    OP
       100 天前
    @yu1miao beta3 阶段嘛 ,beta4 之后才能定 ABI 。
    xiaogu2014
        7
    xiaogu2014  
       100 天前
    ```可以看到,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
        8
    GeekGao  
    OP
       100 天前
    @xiaogu2014 没看懂你的意思, 上面两组结果这分别是 3.12 与 3.13b 的比较。 但是主题目的是比较 Multi-threaded time taken 提升情况。而非 Multi-process

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

    '''
    可以看到,Multi-threaded __多线程__ 任务的情况下我们可以看到相当大的性能差异。
    '''
    Sawyerhou
        10
    Sawyerhou  
       100 天前
    总的来说,是个好消息,起了个好头。
    GeekGao
        11
    GeekGao  
    OP
       100 天前
    @Sawyerhou 是的,GIL 仿佛就是个巨大的有色眼镜
    XinPingQiHe
        12
    XinPingQiHe  
       95 天前
    期待性能突破!
    Maerd
        13
    Maerd  
       93 天前
    一些锁的细粒度还是太高,最大的问题是现在多线程还没有实现延迟 gc ,导致 nogil 的单线程性能爆降,不过 pep 也说明了这个至少也要 5 年左右才能用,现在才算刚起步,也算起了个好头
    GeekGao
        14
    GeekGao  
    OP
       93 天前
    @Maerd 线程同步是个问题,估计一时半会儿也没啥好的方案,所以延迟 GC 的机制很难。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:09 · PVG 03:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.