社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python之父又立Flag:明年让Python快2倍

OpenCV学堂 • 2 年前 • 285 次点击  

点击上方↑↑↑OpenCV学堂”关注我

来源:公众号 量子位 授权


上周刚刚结束的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++来实现。

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

动态语言的特性决定了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则表示“我们必须保持旺盛的创造力。”

参考链接:
[1]https://www.theregister.com/2021/05/19/faster_python_mark_shannon_author/

[2]https://pyfound.blogspot.com/2021/05/the-2021-python-language-summit-pep-654.html
[3]https://www.python.org/dev/peps/pep-0654/

Python version 3.11.0 alpha 0:
https://github.com/faster-cpython/ideas

“A faster CPython”计划简介:
https://github.com/markshannon/faster-cpython


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/114810
 
285 次点击