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
chinesehuazhou
V2EX  ›  Python

《这一次, Python 真的有望告别 GIL 锁了?》

  •  
  •   chinesehuazhou · 2023-02-20 13:40:54 +08:00 via Android · 6422 次点击
    这是一个创建于 402 天前的主题,其中的信息可能已经有所发展或是发生改变。
    避坑说明:

    1.文章简单介绍了 PEP-703 ( Making the Global Interpreter Lock Optional in CPython ),提及 PEP-554 、PEP-684 。不想看简单科普文的,建议去查阅 PEP 文档

    2.文章对 草稿状态的草案 抱有乐观态度,请持保留意见的同学轻喷

    3.链接 1 来自公众号,不喜公众号的同学,请跳过。链接 2 来自知乎,不喜知乎的同学请跳过



    链接 1: https://mp.weixin.qq.com/s/HHSjv0ZlAjq0ZvLHMI-W9g

    链接 2: https://zhuanlan.zhihu.com/p/607655350
    43 条回复    2023-02-21 09:50:05 +08:00
    yuyang
        1
    yuyang  
       2023-02-20 14:11:58 +08:00
    这真不要抱什么期望,只要它还想兼容那一堆 c 模块就基本不可能,python 就这样了,迟早变成性能垫底的主流语言
    anonydmer
        2
    anonydmer  
       2023-02-20 14:24:01 +08:00   ❤️ 2
    别啊,没了 GIL 还是 python 么? 这么古老的东西现在都变成情怀了,不要伤了老玩家的心
    totoro52
        3
    totoro52  
       2023-02-20 14:37:52 +08:00   ❤️ 1
    @anonydmer 把我逗笑了
    monetto
        4
    monetto  
       2023-02-20 14:40:23 +08:00
    其实 GIL 还是有一些正向作用的(狗头)
    有时候,自己写的常驻工具,是 Flask 形式的,里面有些高消耗 CPU 的操作,可以让 CPU 最多只消耗 1/CPU 核数,不至于一下消耗完 CPU 资源。
    tulongtou
        5
    tulongtou  
       2023-02-20 14:42:24 +08:00
    @monetto 高消耗 CPU 的不该换个语言写么,Go/Rust 这种。可能只是 Python 耗 CPU ,换成 Go/Rust 就不耗 CPU 了(偷笑
    raycool
        6
    raycool  
       2023-02-20 15:13:52 +08:00
    期待早日到来的那一天。
    kindjeff
        7
    kindjeff  
       2023-02-20 15:27:11 +08:00   ❤️ 2
    有一说一,真有不少项目把 GIL 当 feature 用的
    a852695
        8
    a852695  
       2023-02-20 15:45:30 +08:00
    够呛,喊了多少年了
    Huelse
        9
    Huelse  
       2023-02-20 16:20:58 +08:00
    这样不就约等于出个 python4 ?当年 2 升 3 就够折腾了,现在生态更发达了更小心翼翼
    lasuar
        10
    lasuar  
       2023-02-20 16:22:28 +08:00
    求生欲好强~
    vicalloy
        11
    vicalloy  
       2023-02-20 16:35:48 +08:00
    相比 GIL ,我更在意 Python 的单核性能。
    victorc
        12
    victorc  
       2023-02-20 16:52:50 +08:00
    完全没有必要,各种包都需要适配,会消耗全世界大量的时间来处理这些隐藏的兼容性 bug

    还不如推倒重来,全新设计一个新语言
    monetto
        13
    monetto  
       2023-02-20 17:56:25 +08:00
    @tulongtou 但是 128MB RAM 的小嵌入式设备跑不起来 Go/Rust ,以前的一些老嵌入式设备也没有完整的 C++ 工具链,也无法编译出 Go/Rust 环境,反而纵观所有语言,Python / Shell 拥有最好的设备兼容性 ...
    我自己的嵌入式设备,因为缺少 C 库,无法通过 PIP 安装定时任务的模块,所以我自己写了一套 Python 的单机定时任务库,完全 Py 实现 ...(逃
    fengjianxinghun
        14
    fengjianxinghun  
       2023-02-20 18:17:56 +08:00
    @monetto 128MB 跑起来 Rust ?证明可能,裸金属现在最好选择就是 c 或者 rust 。这么多 no_std rust 写操作系统的。
    fengjianxinghun
        15
    fengjianxinghun  
       2023-02-20 18:18:23 +08:00
    @monetto 不要把 go 和 rust 混为一谈
    des
        16
    des  
       2023-02-20 18:31:20 +08:00 via iPhone
    @monetto 跑不了 go 还有的说,你说跑不动 rust ?
    aladdinding
        17
    aladdinding  
       2023-02-20 18:38:44 +08:00
    多开几个 python 进程 0.0
    kongkongyzt
        18
    kongkongyzt  
       2023-02-20 18:54:12 +08:00
    Python 没救了说真的。。。
    dearmymy
        19
    dearmymy  
       2023-02-20 18:56:22 +08:00
    感觉没必要了,还不如把协程弄得优雅点
    shijingshijing
        20
    shijingshijing  
       2023-02-20 19:01:53 +08:00
    没有 GIL 的 Python 不够 Pythonic
    ClericPy
        21
    ClericPy  
       2023-02-20 19:27:40 +08:00
    uds + 多进程够我用了, 没什么多核瓶颈, 后面子解释器也愿意迁, 至于去掉 GIL... 观望吧
    PureWhiteWu
        22
    PureWhiteWu  
       2023-02-20 19:31:17 +08:00   ❤️ 1
    @monetto ????跑不起来 Rust ???
    建议了解一下 Rust ,只有可能跑不起来 Python / Shell ,不可能跑不起来 Rust
    monetto
        23
    monetto  
       2023-02-20 19:51:00 +08:00   ❤️ 1
    @PureWhiteWu 看清楚描述再说... 我是说缺少 C++ 和 C 的工具链,以及自带库... 我给你举个很简单的例子,iPhone3GS 在 iOS6 的 Cydia 商店是自带 Python 2.7 的,但是如果你想搞个 Rust ,就得自己找全 Darwin 的 GCC Library ,然后自己编译,这个过程太折腾了,不如用自带得了。

    某些嵌入式设备同理,厂家自带了 Python ,但是没提供 GCC Library ,你咋给我编译出一个 Rust ... ?
    monetto
        24
    monetto  
       2023-02-20 19:56:47 +08:00
    @PureWhiteWu 根据 Github 显示 Dependencies
    Make sure you have installed the dependencies:

    python 3 or 2.7
    git
    A C compiler (when building for the host, is enough; cross-compiling may need additional compilers)cc
    curl (not needed on Windows)
    pkg-config if you are compiling on Linux and targeting Linux
    libiconv (already included with glibc on Debian-based distros)
    To build Cargo, you'll also need OpenSSL ( or on most Unix distros).libssl-devopenssl-devel

    If building LLVM from source, you'll need additional tools:

    g++, , or MSVC with versions listed on LLVM's documentationclang++
    ninja, or GNU 3.81 or later (Ninja is recommended, especially on Windows)make
    cmake 3.13.4 or later
    libstdc++-static may be required on some Linux distributions such as Fedora and Ubuntu
    On tier 1 or tier 2 with host tools platforms, you can also choose to download LLVM by setting . Otherwise, you'll need LLVM installed and in your path. See the rustc-dev-guide for more info.llvm.download-ci-llvm = truellvm-config


    注意这行 A C compiler (when building for the host, is enough; cross-compiling may need additional compilers)
    如果连 C compiler 都不健全(参考部分 Darwin 设备),你咋编译出 Rust ... 而且要是有这个编译环境,为啥不上 Java ...
    darrh00
        25
    darrh00  
       2023-02-20 19:59:53 +08:00
    公众号和知乎都讨厌咋办啊。。。
    monetto
        26
    monetto  
       2023-02-20 20:02:44 +08:00
    @fengjianxinghun
    @des
    统一回复,上面的楼说了,主要是缺少 compiler ... 要不,你在 iPhone 3GS 上跑个 Rust ... ? 我其实也挺想的 ...
    chinesehuazhou
        27
    chinesehuazhou  
    OP
       2023-02-20 20:03:07 +08:00 via Android
    longbye0
        28
    longbye0  
       2023-02-20 20:06:04 +08:00   ❤️ 1
    如果有人是 pytorch 的重度用户,看这篇文章可以理解下 nogil 能有什么用。

    为什么 Python 的 GIL 问题一直让人诟病,Python 社区却不解决? - Yuxin Wu 的回答 - 知乎
    https://www.zhihu.com/question/323812020/answer/2217457493
    shijingshijing
        29
    shijingshijing  
       2023-02-20 20:23:49 +08:00
    @monetto 你可能是弄混淆了 build 环境和 production 环境,Rust 本身是不需要任何 runtime 的,这点 C,C++,Rust 是一致的,而 Go,Java,C#都需要 runtime 或者 vm 来提供一个执行环境,Python 和 Perl 更是需要一个 Interpreter 来解释脚本(不讨论有的已经编译成二进制的情况)

    如果一定需要依赖,可能也只是操作系统 API ,比如 glibc 这种,我没写过 Rust ,这点存疑。理论上,Rust 是可以直接跑在 BareMetal 上的,连操作系统都不需要。
    whileFalse
        30
    whileFalse  
       2023-02-20 20:52:00 +08:00 via iPhone
    @monetto 你要这么说的话 python3 的升级也不关 python 2.7 啥事啊
    des
        31
    des  
       2023-02-20 20:56:16 +08:00 via iPhone
    @shijingshijing 是的,rust 完全可以不使用 glibc ,除非是供应商只提供了编译好的 python 库
    ixiaohei
        32
    ixiaohei  
       2023-02-20 21:27:00 +08:00   ❤️ 1
    @monetto go 可以交叉编译的,只需要配置个环境变量就行。而且是静态编译,二进制运行时什么也不依赖;以前在 96M 和 256M 的嵌入式设备上随便跑。我觉得你可能都没有用过交叉编译。而且用纯 C 和 C++很多也是搞交叉编译,不过工具链配置复杂。
    fox0001
        33
    fox0001  
       2023-02-20 21:32:28 +08:00
    Python 的包袱太重了……
    peefy
        34
    peefy  
       2023-02-20 21:40:24 +08:00
    看样子即使提案还需要在 CPython 中做大量的开发测试工作.. 目前 GIL 导致多线程搞不了性能提升,用多进程折腾吧..
    joesonw
        35
    joesonw  
       2023-02-21 00:27:18 +08:00 via iPhone   ❤️ 1
    @shijingshijing C#和 Java 都是编译成 IL ,需要 runtime/vm 来执行。Go 打包成二进制,只是包含了一个 GC 和调度,打包出来的可不是中间语言。所以有 tinygo 这个项目,面向嵌入式,对于不同的硬件性能有不同级别的 GC 和调度的实现。
    zhlxsh
        36
    zhlxsh  
       2023-02-21 01:36:07 +08:00 via iPhone
    从什么时候开始,文章的标题“流行”疑问句了
    mrcn
        37
    mrcn  
       2023-02-21 01:53:55 +08:00
    @monetto 128M RAM 就跑不起来了?把 M 换成 K ,128K RAM 都能跑。rust 又没有运行时,什么东西能不能跑跟语言是 rust 还是 c 没有关系的。至于你说的编译问题,一般在这类平台都是交叉编译,x86 的工具链可以编译出 arm 的二进制。
    LeeReamond
        38
    LeeReamond  
       2023-02-21 02:19:17 +08:00
    之前说的 CPU 缓存命中问题解决了吗
    tu7jako
        39
    tu7jako  
       2023-02-21 08:13:25 +08:00 via iPhone
    @kindjeff 能举个栗子吗?
    krixaar
        40
    krixaar  
       2023-02-21 09:06:58 +08:00   ❤️ 1
    @monetto #26 大家的理解“跑”是运行个 Rust 编译后的二进制,不是“跑”源代码;你的“跑”是直接在设备上运行自定义的代码,这都不在一个频道上……
    adoal
        41
    adoal  
       2023-02-21 09:10:25 +08:00
    由搞计算的人来主推这事,恐怕是推不动的。
    gumuxi
        42
    gumuxi  
       2023-02-21 09:48:36 +08:00
    说到点上了
    gumuxi
        43
    gumuxi  
       2023-02-21 09:50:05 +08:00
    @krixaar 说到点上了,通常都认为“跑”是指的编译打包后的最终程序"run",不是开发调试的“run"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1301 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 17:47 · PVG 01:47 · LAX 10:47 · JFK 13:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.