Python 3.12 稳定版发布啦,哪个改动最有吸引力?

2023-10-03 14:36:32 +08:00
 owtotwo

Python 3.12 有什么新变化

以下为主要改动:

感觉并没有什么动力升级到此版本,因为看了半天发现:

模块中新增的 itertools.batched(iterable, n) 函数可能是对我而言“最大”的改动 XD

6193 次点击
所在节点    Python
30 条回复
aploium
2023-10-04 10:45:41 +08:00
Per-Interpreter GIL 真是丑陋,他的作者在 nogil 的 PEP 讨论上说他不支持 nogil ,因为他已经花了 8 年在 Per-Interpreter GIL 上,他认为这已经足够解决 python 的多核问题了。 幸好群众不认同,我无法想象另一条世界线上未来被迫用这种学院派玩意写多核。
语言层面没什么对我有用的改进,软 type 语法为了兼容 pypy/pyston 也没法用
相比 Per-Interpreter GIL ,Immortal Objects 这种才是 end-user 在生产中有痛点后提出的有效改进。它对 nogil 巨大的助攻,如果没有它,nogil 的性能会下降一截。而且对实际的多核 python 程序(通常会假设有 fork 机制,很多内存可以 share)能减少很多(对我来说可能有十几个 G)无效内存 Copy On Write 。

对了建议路过的观众在用 3.11 以下的,去尝试一下 pyston-lite ,通过 frame-eval 加入简单的 jit ,来实现免费的性能午餐,但是和 torch 2.0 不兼容
uni
2023-10-04 11:45:59 +08:00
类型啊
我之前就是因为类型,甚至无法从 3.11 退回 3.10
kneo
2023-10-04 21:03:19 +08:00
“Per-Interpreter GIL ,但仅限 C-API 。所以裸写 Python 的 GIL 还在……”
不管 Python 还是 C ,GIL 都在。

“目前预计 3.13 才会有 可选 的 No-GIL Python 解释器”
应该没戏。
lanlanye
2023-10-05 02:00:18 +08:00
新的泛型写法可能会成为我升级的动力
sdsaaeee
2023-10-05 10:50:02 +08:00
可能一些库不兼容,对 12 无感,现在 11
owtotwo
2023-10-05 11:26:31 +08:00
@kneo 对于前者,是的,GIL 都在。

原话的完全句子是 _“目前的 Per-Interpreter GIL 子解释器仅供使用 C-API 创建,而暂时并不支持仅使用 Python 代码创建。所以编写纯 Python 代码时 GIL 对多线程并行的性能影响尚在。”_ (请原谅我的措辞不当)

Faster CPython 的 Plan 中有提到使用 Python 代码创建此类子解释器 [Enabling subinterpreters from Python]( https://github.com/faster-cpython/ideas/blob/0905dcc8ba76ff1f49b173437f4bc9359aa5ca19/3.13/README.md#enabling-subinterpreters-from-python) 。

对于后者,是今年 1 月份创建的 PEP 中 [PEP 703 – Making the Global Interpreter Lock Optional in CPython]( https://peps.python.org/pep-0703/) 提到的,但是否真能在明年 3.13-rc 版赶出来,感觉持悲观态度,要实现 `--disable-gil` ,看起来难度并不低。
owtotwo
2023-10-05 11:43:38 +08:00
@uni @lanlanye @sdsaaeee 我也是因为新的类型标注功能,在今年将 3.8 升到 3.11 了。

目前截至 2023 年 10 月份,对 3.11 而言,库的兼容程度比预想中的要好。

@Mohanson @youthfir 另外 PyTorch 2.1.0 Stable 版本昨天发布了,已经支持了 Python 3.11 ,或许可以考虑升级了~

[PyTorch 2.1: automatic dynamic shape compilation, distributed checkpointing]( https://github.com/pytorch/pytorch/releases/tag/v2.1.0)

[Support Python 3.11 #86566]( https://github.com/pytorch/pytorch/issues/86566)
e
neoblackcap
2023-10-05 16:22:10 +08:00
@Kirscheis Python 已经是强类型的语言,看看它报错就知道了,它可是能知道所有变量的类型的。而且不管是什么错它都有处理,而不是直接 core dump
crackidz
2023-10-05 17:37:37 +08:00
其实 3.12 提供的 Per-Interpreter GIL 其实已经可以释放很多性能了,起手一个 C-Loader 后面跟 Python 代码就行了,以后不用考虑多进程的问题

TypeHits 用起来很爽,多加点多加点
akaHenry
2023-10-12 02:30:34 +08:00
Python 4.0 不是 Mojo 吗? 狗头🐶。。。

Python 3.8 之后的新版本更新, 都是比较无聊的特性。

作为脚本语言,干啥都是二把刀,认清客观现实,怎么糊的快,怎么糊的爽,怎么来。

脱裤子放屁的事,少干。

整一堆没用的优化,不如换个语言(Rust/Zig/Go/Mojo) 随便选。

写脚本,就要有写脚本的觉悟。

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

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

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

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

© 2021 V2EX