华中区国家认证
高端IT职业培训学校
027-86639004
2022年05月18日
作为一门异常受欢迎的编程语言,Python具备很多的优点,比如:易于学习、用途广泛、有成千上万个用于数据科学的有用的库。但同时,Python一直被诟病的就是它运行速度太慢。
在去年的PyCon US 2021大会上,Python之父曾表示:要在2022年的Python 3.11中,将Python速度提高2倍,4年内,速度提升5倍,以解决Python与C++等其他编程语言相比在速度上的关键缺点。
如今,速度太慢的情况在Python 3.11中即将改变。在今年晚些时候发布稳定版之前,目前正处于其预览版(版本3.11.0b1)的第一个测试阶段。
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项目(GitHub地址:ideas/main-vs-310.rst at main · faster-cpython/ideas · GitHub)提供了一些关于CPython 3.11在过去一年的性能更新。在PyCon US 2022会议之前,该项目公布了更多的结果:在几十个性能指标上对3.11测试预览版和3.10进行了比较,显示3.11.0b1总体上比3.10快1.25倍。
新的字节码解释器使错误处理更高效
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相比没有变化。
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项目的实施计划(GitHub地址:faster-cpython/plan.mdatmaster · markshannon/faster-cpython · GitHub),CPython 3.12可能会获得一个 "用于小区域的简单JIT编译器",在运行时使用相对简单、快速的编译器编译小区域的专门代码;而CPython 3.13将扩展编译区域,增强编译器以生成卓越的机器代码。
最后,对于以上Faster CPython项目加速Python的做法,你有什么看法?欢迎在评论区留言。