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

2023-02-20 13:40:54 +08:00
 chinesehuazhou
避坑说明:

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
6516 次点击
所在节点    Python
43 条回复
ClericPy
2023-02-20 19:27:40 +08:00
uds + 多进程够我用了, 没什么多核瓶颈, 后面子解释器也愿意迁, 至于去掉 GIL... 观望吧
PureWhiteWu
2023-02-20 19:31:17 +08:00
@monetto ????跑不起来 Rust ???
建议了解一下 Rust ,只有可能跑不起来 Python / Shell ,不可能跑不起来 Rust
monetto
2023-02-20 19:51:00 +08:00
@PureWhiteWu 看清楚描述再说... 我是说缺少 C++ 和 C 的工具链,以及自带库... 我给你举个很简单的例子,iPhone3GS 在 iOS6 的 Cydia 商店是自带 Python 2.7 的,但是如果你想搞个 Rust ,就得自己找全 Darwin 的 GCC Library ,然后自己编译,这个过程太折腾了,不如用自带得了。

某些嵌入式设备同理,厂家自带了 Python ,但是没提供 GCC Library ,你咋给我编译出一个 Rust ... ?
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
2023-02-20 19:59:53 +08:00
公众号和知乎都讨厌咋办啊。。。
monetto
2023-02-20 20:02:44 +08:00
@fengjianxinghun
@des
统一回复,上面的楼说了,主要是缺少 compiler ... 要不,你在 iPhone 3GS 上跑个 Rust ... ? 我其实也挺想的 ...
chinesehuazhou
2023-02-20 20:03:07 +08:00
longbye0
2023-02-20 20:06:04 +08:00
如果有人是 pytorch 的重度用户,看这篇文章可以理解下 nogil 能有什么用。

为什么 Python 的 GIL 问题一直让人诟病,Python 社区却不解决? - Yuxin Wu 的回答 - 知乎
https://www.zhihu.com/question/323812020/answer/2217457493
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
2023-02-20 20:52:00 +08:00
@monetto 你要这么说的话 python3 的升级也不关 python 2.7 啥事啊
des
2023-02-20 20:56:16 +08:00
@shijingshijing 是的,rust 完全可以不使用 glibc ,除非是供应商只提供了编译好的 python 库
ixiaohei
2023-02-20 21:27:00 +08:00
@monetto go 可以交叉编译的,只需要配置个环境变量就行。而且是静态编译,二进制运行时什么也不依赖;以前在 96M 和 256M 的嵌入式设备上随便跑。我觉得你可能都没有用过交叉编译。而且用纯 C 和 C++很多也是搞交叉编译,不过工具链配置复杂。
fox0001
2023-02-20 21:32:28 +08:00
Python 的包袱太重了……
peefy
2023-02-20 21:40:24 +08:00
看样子即使提案还需要在 CPython 中做大量的开发测试工作.. 目前 GIL 导致多线程搞不了性能提升,用多进程折腾吧..
joesonw
2023-02-21 00:27:18 +08:00
@shijingshijing C#和 Java 都是编译成 IL ,需要 runtime/vm 来执行。Go 打包成二进制,只是包含了一个 GC 和调度,打包出来的可不是中间语言。所以有 tinygo 这个项目,面向嵌入式,对于不同的硬件性能有不同级别的 GC 和调度的实现。
zhlxsh
2023-02-21 01:36:07 +08:00
从什么时候开始,文章的标题“流行”疑问句了
mrcn
2023-02-21 01:53:55 +08:00
@monetto 128M RAM 就跑不起来了?把 M 换成 K ,128K RAM 都能跑。rust 又没有运行时,什么东西能不能跑跟语言是 rust 还是 c 没有关系的。至于你说的编译问题,一般在这类平台都是交叉编译,x86 的工具链可以编译出 arm 的二进制。
LeeReamond
2023-02-21 02:19:17 +08:00
之前说的 CPU 缓存命中问题解决了吗
tu7jako
2023-02-21 08:13:25 +08:00
@kindjeff 能举个栗子吗?
krixaar
2023-02-21 09:06:58 +08:00
@monetto #26 大家的理解“跑”是运行个 Rust 编译后的二进制,不是“跑”源代码;你的“跑”是直接在设备上运行自定义的代码,这都不在一个频道上……

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

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

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

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

© 2021 V2EX