1
yuyang 2023-02-20 14:11:58 +08:00
这真不要抱什么期望,只要它还想兼容那一堆 c 模块就基本不可能,python 就这样了,迟早变成性能垫底的主流语言
|
2
anonydmer 2023-02-20 14:24:01 +08:00 2
别啊,没了 GIL 还是 python 么? 这么古老的东西现在都变成情怀了,不要伤了老玩家的心
|
4
monetto 2023-02-20 14:40:23 +08:00
其实 GIL 还是有一些正向作用的(狗头)
有时候,自己写的常驻工具,是 Flask 形式的,里面有些高消耗 CPU 的操作,可以让 CPU 最多只消耗 1/CPU 核数,不至于一下消耗完 CPU 资源。 |
5
tulongtou 2023-02-20 14:42:24 +08:00
@monetto 高消耗 CPU 的不该换个语言写么,Go/Rust 这种。可能只是 Python 耗 CPU ,换成 Go/Rust 就不耗 CPU 了(偷笑
|
6
raycool 2023-02-20 15:13:52 +08:00
期待早日到来的那一天。
|
7
kindjeff 2023-02-20 15:27:11 +08:00 2
有一说一,真有不少项目把 GIL 当 feature 用的
|
8
a852695 2023-02-20 15:45:30 +08:00
够呛,喊了多少年了
|
9
Huelse 2023-02-20 16:20:58 +08:00
这样不就约等于出个 python4 ?当年 2 升 3 就够折腾了,现在生态更发达了更小心翼翼
|
10
lasuar 2023-02-20 16:22:28 +08:00
求生欲好强~
|
11
vicalloy 2023-02-20 16:35:48 +08:00
相比 GIL ,我更在意 Python 的单核性能。
|
12
victorc 2023-02-20 16:52:50 +08:00
完全没有必要,各种包都需要适配,会消耗全世界大量的时间来处理这些隐藏的兼容性 bug
还不如推倒重来,全新设计一个新语言 |
13
monetto 2023-02-20 17:56:25 +08:00
@tulongtou 但是 128MB RAM 的小嵌入式设备跑不起来 Go/Rust ,以前的一些老嵌入式设备也没有完整的 C++ 工具链,也无法编译出 Go/Rust 环境,反而纵观所有语言,Python / Shell 拥有最好的设备兼容性 ...
我自己的嵌入式设备,因为缺少 C 库,无法通过 PIP 安装定时任务的模块,所以我自己写了一套 Python 的单机定时任务库,完全 Py 实现 ...(逃 |
14
fengjianxinghun 2023-02-20 18:17:56 +08:00
@monetto 128MB 跑起来 Rust ?证明可能,裸金属现在最好选择就是 c 或者 rust 。这么多 no_std rust 写操作系统的。
|
15
fengjianxinghun 2023-02-20 18:18:23 +08:00
@monetto 不要把 go 和 rust 混为一谈
|
17
aladdinding 2023-02-20 18:38:44 +08:00
多开几个 python 进程 0.0
|
18
kongkongyzt 2023-02-20 18:54:12 +08:00
Python 没救了说真的。。。
|
19
dearmymy 2023-02-20 18:56:22 +08:00
感觉没必要了,还不如把协程弄得优雅点
|
20
shijingshijing 2023-02-20 19:01:53 +08:00
没有 GIL 的 Python 不够 Pythonic
|
21
ClericPy 2023-02-20 19:27:40 +08:00
uds + 多进程够我用了, 没什么多核瓶颈, 后面子解释器也愿意迁, 至于去掉 GIL... 观望吧
|
22
PureWhiteWu 2023-02-20 19:31:17 +08:00 1
@monetto ????跑不起来 Rust ???
建议了解一下 Rust ,只有可能跑不起来 Python / Shell ,不可能跑不起来 Rust |
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 ... ? |
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 ... |
25
darrh00 2023-02-20 19:59:53 +08:00
公众号和知乎都讨厌咋办啊。。。
|
26
monetto 2023-02-20 20:02:44 +08:00
|
27
chinesehuazhou OP |
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 |
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 上的,连操作系统都不需要。 |
30
whileFalse 2023-02-20 20:52:00 +08:00 via iPhone
@monetto 你要这么说的话 python3 的升级也不关 python 2.7 啥事啊
|
31
des 2023-02-20 20:56:16 +08:00 via iPhone
@shijingshijing 是的,rust 完全可以不使用 glibc ,除非是供应商只提供了编译好的 python 库
|
32
ixiaohei 2023-02-20 21:27:00 +08:00 1
@monetto go 可以交叉编译的,只需要配置个环境变量就行。而且是静态编译,二进制运行时什么也不依赖;以前在 96M 和 256M 的嵌入式设备上随便跑。我觉得你可能都没有用过交叉编译。而且用纯 C 和 C++很多也是搞交叉编译,不过工具链配置复杂。
|
33
fox0001 2023-02-20 21:32:28 +08:00
Python 的包袱太重了……
|
34
peefy 2023-02-20 21:40:24 +08:00
看样子即使提案还需要在 CPython 中做大量的开发测试工作.. 目前 GIL 导致多线程搞不了性能提升,用多进程折腾吧..
|
35
joesonw 2023-02-21 00:27:18 +08:00 via iPhone 1
@shijingshijing C#和 Java 都是编译成 IL ,需要 runtime/vm 来执行。Go 打包成二进制,只是包含了一个 GC 和调度,打包出来的可不是中间语言。所以有 tinygo 这个项目,面向嵌入式,对于不同的硬件性能有不同级别的 GC 和调度的实现。
|
36
zhlxsh 2023-02-21 01:36:07 +08:00 via iPhone
从什么时候开始,文章的标题“流行”疑问句了
|
37
mrcn 2023-02-21 01:53:55 +08:00
@monetto 128M RAM 就跑不起来了?把 M 换成 K ,128K RAM 都能跑。rust 又没有运行时,什么东西能不能跑跟语言是 rust 还是 c 没有关系的。至于你说的编译问题,一般在这类平台都是交叉编译,x86 的工具链可以编译出 arm 的二进制。
|
38
LeeReamond 2023-02-21 02:19:17 +08:00
之前说的 CPU 缓存命中问题解决了吗
|
40
krixaar 2023-02-21 09:06:58 +08:00 1
@monetto #26 大家的理解“跑”是运行个 Rust 编译后的二进制,不是“跑”源代码;你的“跑”是直接在设备上运行自定义的代码,这都不在一个频道上……
|
41
adoal 2023-02-21 09:10:25 +08:00
由搞计算的人来主推这事,恐怕是推不动的。
|
42
gumuxi 2023-02-21 09:48:36 +08:00
说到点上了
|