Python之父:明年让Python快2倍

开发 后端
5月中旬刚刚结束的Pycon US 2021上,Python之父Guido van Rossum提出要在未来四年内将CPython速度提升5倍。

 5月中旬刚刚结束的Pycon US 2021上,Python之父Guido van Rossum提出要在未来四年内将CPython速度提升5倍。

而这一“Shannon计划”的参与者除了Guido本人之外,还有任职微软的CPython核心开发人员Eric Snow,以及Semmle的研究工程师Mark Shannon。

但在此之前,Guido可并不认为提升CPython的速度有多关键,因为“有其他方法可以获得更好的性能”,比如JIT编译的PyPy,或使用C语言编写扩展。

为什么要加速?

Python真的慢吗?

不见得,开发效率和执行速度本就难以兼得。

而且发展到今天,Python已经是一个胶水语言的定位,主要用来快速构建系统的逻辑控制流,再把对性能要求高的部分丢给C/C++来实现。

不过如果只看标准版的语言实现本身的话……它的性能确实不怎么样。

[[404169]] 

动态语言的特性决定了Python会在C语言代码运行(runtime)上花费大量的时间,且难以使用JIT(Just-In-Time)进行优化。

在接受英国技术新闻网站The Register的采访时,对于“为什么开始关注CPython性能?”的问题,Shannon表示:

    过去几年里,Python在机器学习领域的使用率大大提升,可用资源也越来越多。这意味着我们可以不用担心破坏其可靠性,而是专注在性能上。

并且,Shannon之前参与的HotPy项目中所开发的解释器,比目前CPython解释器的纯Python代码快三倍。这证明了对CPython优化的可行性。

而在去年10月份的时候,耐不住退休寂寞的Guido又加入了微软:

再加上疫情的家里蹲buff,拥有了更多时间的大佬们一拍即合,决定Make Python Great Again。

加速之前的挑战

Shannon坦言,向下兼容是加速Python的最大挑战。

其实不仅是对Python,90年代末libc的那次不兼容更新,直接导致所有应用程序都要重编……

而现在已经凉凉的Pyston,官方文章里提到的Dropbox放弃Pyston项目的几大因素中,第一个也是:

这就是所有既试图兼容CPython,又想大幅提升性能的Python都会遇到的严峻问题。

因为Python的执行类似于HTML渲染:更多是对运行时应如何执行C库的描述,而非单步执行命令。

所以,Python性能提升的源头来自于这些C扩展模块。而CPython又有着超过400k的loc,这意味着要从底层去做优化是一项非常庞大的工程。

特别是对于过于动态的Python语言来说,语言的语义对优化的影响就更大了。

而现在加速的过程中,像是CPython的工具、调试器、配置文件,NumPy包,以及Cython这样的编译器,又会有多少涉及到CPython内部和底层的行为?

因此Shannon表示:

要改变是困难的……与CPython用户间的隐形协议并没有很好地定义什么能改,什么不能改。

可能是五年前从Python2.x迁移到3的痛苦经历实在是有些刻骨铭心,Guido专门发推表示这次的迁移会更加平和。 

而他也在Python峰会中承诺:不破坏stable ABI兼容性;不破坏limited API兼容性;不破坏或减缓extreme cases。

“总之,代码的可维护性才是第一要务。”

Python的5倍速之路

按照已在GitHub上发布的faster-cpython,Shannon计划具体分为四个阶段:

Python 3.10

预计在今年10月发布,主要添加一个自适应、专业化的解释器(interpreter)。

 

解释器将不再遇运行时生成代码,而是利用程序中的类型稳定性,在执行过程中适应类型和数值。

Python 3.11

Guido提出要在3.11版本实现至少2倍的提速,为此,他已经和几位Python开发人员提出了一份增强功能的提案PEP 659。

这一提案中表示要增加适应性的字节码解释器,并且实施更有效的异常处理。

除此之外,还提出了优化帧堆栈、改变函数调用的方式、增加优化以加快启动时间,以及修改 .pyc 字节码缓存文件格式等工作。

Python 3.12

这一阶段使用针对小区域的JIT解释器,在运行代码时简单、快速地对小区域的专门代码进行编译。

Python 3.13

同样在代码运行时对扩展区域进行编译,增强编译器,以完成5倍的超级加速。

Guido表示此次围绕性能展开的 Python 变更,将主要服务于运行CPU密集型纯Python代码的开发者,以及内置Python网站的用户。

而在C语言代码(如 NumPy和TensorFlow)、I/O 绑定代码、多线程代码以及算法代码上,提升效果将会比较有限。

微软回馈Python

其实,微软长期以来一直以多种方式为Python项目提供助力,包括在Azure云AI服务教程里发布免费的Python课程,以及通过VS Code Python扩展在Win10及以上版本支持Python。

自 2006 年起,微软还成为了Python软件基金会(PSF)的赞助商,并在今年出资15 万美元进行资助。

目前已有五位Python开发者社区的核心人员在微软任职,包括去年年底加入的Python之父,和这次Shannon计划里的三人之一Eric Snow。

Guido也在这次峰会里特地cue了一下微软,提出微软资助了一支小型Python团队“负责语言解释层面的性能改进工作”,以使他能携手微软同事持续对Python进行开发。

当然,对于3.11版本的短期目标,Guido还是在ppt中给自己兜了个底。

△“乐观一点,好奇一点总没错”

而对于那个四年五倍速的最终目标,Guido则表示“我们必须保持旺盛的创造力。” 

[[404171]]

 

责任编辑:庞桂玉 来源: 菜鸟学Python
相关推荐

2021-05-17 09:57:42

Python 开发编程语言

2021-09-08 08:00:00

PyPolars数据开源

2015-08-20 10:05:15

Python

2020-01-07 10:14:38

Python程序员脚本语言

2015-08-21 10:14:17

Python 之父Python

2016-08-01 10:38:14

华为

2022-10-27 07:09:34

DjangoAPIRedis

2018-10-07 05:27:03

Python代码机器学习

2023-09-08 15:05:51

Mojo编程语言

2021-07-25 22:43:39

Python代码开发

2021-02-07 23:08:29

Python开发Java

2019-07-24 13:42:34

Python编程语言代码

2020-07-22 08:30:02

代码开发工具

2023-05-15 07:20:24

2019-10-31 15:13:11

Python

2022-10-27 08:31:31

架构

2023-05-10 15:07:00

Mojo开发选项

2022-04-19 15:16:15

Python开发技巧

2009-09-22 10:09:58

AHCIWindows 7加速

2013-09-03 10:20:10

SlashdotPythonPython之父采访
点赞
收藏

51CTO技术栈公众号