Python很慢,但它将变得更快!

共 2889字,需浏览 6分钟

 ·

2022-07-26 02:16


导读:对3.11测试预览版和3.10进行了比较,结果比3.10速度快1.25倍。


本文经授权转自公众号CSDN(ID:CSDNnews)
整理:于轩




作为一门异常受欢迎的编程语言,Python的优点有很多,比如:易于学习、用途广泛、有成千上万个用于数据科学的有用的库。但同时,Python一直被诟病的就是它运行速度太慢。

在去年的PyCon US 2021大会上,Python之父Guido van Rossum曾表示:要在2022年的Python 3.11中,将Python速度提高2倍,4年内,速度提升5倍,以解决Python与C++等其他编程语言相比在速度上的关键缺点。

如今,速度太慢的情况在Python 3.11中即将改变。在今年晚些时候发布稳定版之前,目前正处于其预览版(版本3.11.0b1)的第一个测试阶段。


01 CPython 3.11已比3.10提速1.25倍

在近期的PyCon US 2022会议上,Core Python(CPython)开发者Mark Shannon分享了关于加速Python项目的细节,此外,开发者还展示了在浏览器中运行Python代码这一目标的进展。

去年,微软资助了Python软件基金会(PSF)的一个项目——“Shannon Plan”,该项目由Python创造者Guido van Rossum和Mark Shannon领导,承诺在今年的Python 3.11中将其速度提高2倍。其愿景是促使Python向C语言的性能发展。


微软在2020年聘请了van Rossum,并让他自由选择任何项目。在去年的PyCon US 2021会议上,他称自己 "选择回到我的根源",并将致力于解决Python著名的性能不足问题。

性能也许并不是Python的首要任务,因为机器学习和数据科学的采用得益于TensorFlow、NumPy、Pandas以及更多的平台,如AWS的Boto3 SDK for Python。这些平台每月被下载数千万次,并在通常不受硬件限制的环境中使用。

Faster CPython项目提供了一些关于CPython 3.11在过去一年的性能更新。在PyCon US 2022会议之前,该项目公布了更多的结果:在几十个性能指标上对3.11测试预览版和3.10进行了比较,显示3.11.0b1总体上比3.10快1.25倍。

Faster CPython项目 GitHub 地址:
https://github.com/faster-cpython/ideas/blob/main/main-vs-310.rst


02 新的字节码解释器使错误处理更高效

Shannon对该项目提高Python性能的能力持现实态度,但他相信这些改进可以将Python的可行用途扩展到更多的虚拟机。他去年在Python增强提案(PEP)659中写道:

Python被广泛认为是缓慢的。虽然Python永远达不到C、Fortran甚至Java等低级语言的性能,但我们希望它能与脚本语言的快速实现相媲美,如Javascript的V8或Lua的LuaJIT。具体来说,我们希望通过CPython实现这些性能目标,使所有Python用户受益,包括那些无法使用PyPy或其他替代性虚拟机的用户。

在PEP 659中详述的关键方法是:

专门化的、自适应的解释器,但它在一个非常小的区域内积极地专门化代码,并能够迅速和低成本地适应错误的专门化。

如上所述,虚拟机的优化是 "昂贵的",往往需要很长的 "预热 "时间。为了避免这种时间开销,虚拟机应该推测“即使在一个函数执行几次后,专门化也是合理的”。所以,解释器需要持续地且非常低廉地进行优化和去优化。

这应该会产生一个更快的CPython解释器,它可以在程序执行过程中跟踪单个字节码。据Python软件基金会(PSF)称,新解释器的工作几乎已经完成,但仍需要完成循环和二进制操作的动态专门化。

此外,3.11的内存消耗与3.10相比没有变化。



03 CPython JIT编译器即将实现

关于Python性能的即时(JIT)编译器问题,根据Python软件基金会(PSF)对该事件的报道,Shannon认为这不是一个优先事项,可能最早也要到Python 3.13才能实现。

此外,用于数据科学的Anaconda Python发行版的制造商Anaconda,正在支持Pyston项目,该项目是Python的一个实现,承诺比Python有速度上的提高。

Anaconda在加速Python方面较早的努力之一是Numba项目,这是一个基于LLVM的CPython JIT编译器,它可以加速在CPU或GPU上运行的Python数值函数,但不能优化整个程序,也不能解决更广泛的Python用例。另一个是PyPy,它是CPython的一个实现,带有JIT编译器以获得更快的性能。

根据Faster CPython项目的实施计划,CPython 3.12可能会获得一个 "用于小区域的简单JIT编译器",在运行时使用相对简单、快速的编译器编译小区域的专门代码;而CPython 3.13将扩展编译区域,增强编译器以生成卓越的机器代码。

Faster CPython项目的实施计划 GitHub 地址:
https://github.com/markshannon/faster-cpython/blob/master/plan.md

最后,对于以上Faster CPython项目加速Python的做法,你有什么看法?欢迎在评论区留言。

参考链接:
https://www.zdnet.com/article/programming-languages-python-is-slow-but-its-about-to-get-faster/


延伸阅读👇


利用Python进行数据分析(原书第2版)


干货直达👇


更多精彩👇

在公众号对话框输入以下关键词
查看更多优质内容!

读书 | 书单 | 干货 | 讲明白 | 神操作 | 手把手
大数据 | 云计算 | 数据库 | Python | 爬虫 | 可视化
AI | 人工智能 | 机器学习 | 深度学习 | NLP
5G | 中台 | 用户画像 数学 | 算法 数字孪生

据统计,99%的大咖都关注了这个公众号
👇
浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报