当前位置: 首页 > 科技观察

Python之父:明年让Python快2倍

时间:2023-03-13 13:46:57 科技观察

Python之父:明年让Python速度翻倍除了Guido本人,此次“香农计划”的参与者还包括微软CPython核心开发者EricSnow和Semmle研究工程师MarkShannon。但在此之前,Guido并不认为提高CPython的速度很关键,因为“还有其他方法可以获得更好的性能”,比如JIT编译PyPy,或者用C编写扩展。为什么要提速?Python真的很慢吗?不一定,开发效率和执行速度很难兼得。而在今天,Python已经被定位为一种胶水语言,主要用于快速构建系统的逻辑控制流程,然后将对性能要求较高的部分丢给C/C++来实现。但是如果只看语言实现本身的标准版本……它的性能确实没有那么好。动态语言的特性决定了Python会把大量时间花在C语言代码运行时(runtime)上,很难用JIT(Just-In-Time)进行优化。在接受英国科技新闻网站TheRegister采访时,Shannon针对“你为什么开始关注CPython性能?”的问题说:过去几年,Python在机器学习领域的使用率有大大增加,可用的资源也越来越多。.这意味着我们可以专注于性能而不用担心影响其可靠性。而且,Shannon之前参与的HotPy项目中开发的解释器比现在的CPython解释器的纯Python代码快三倍。这证明了CPython优化的可行性。而在去年10月,耐不住退休寂寞的Guido再次加盟微软:加上疫情期间宅在家里的buff,时间比较多的老板们一拍即合,决定MakePythonGreat再次。加速前的挑战Shannon坦言,向后兼容是加速Python最大的挑战。其实不光是Python,1990年代末期libc的不兼容更新,直接导致所有应用程序都得重新编译……而Pyston,已经很酷了,官方文章里也提到了。其中,第一个也是:这是所有试图兼容CPython、想大幅提升性能的Python都会遇到的严重问题。因为Python的执行类似于HTML渲染:更多的是描述C库在运行时应该如何执行,而不是单步执行命令。因此,Python性能提升的源泉就来自于这些C扩展模块。而CPython有超过400k的loc,也就是说从底层去优化是一个非常庞大的工程。特别是对于过于动态化的Python语言,语言的语义对优化的影响更大。现在加速的过程中,有多少工具、调试器、配置文件、NumPy包、Cython之类的编译器涉及到CPython的内部和底层行为?所以香农说:改变是困难的……与CPython用户的隐含协议没有很好地定义什么可以改变,什么不能改变。可能是五年前从Python2.x迁移到3的惨痛经历,真是刻骨铭心。圭多专门发推表示,这次迁徙会更加和平。而且他还在Python峰会上承诺:不会破坏稳定的ABI兼容性;不破坏有限的API兼容性;不要打破或减缓极端情况。“总之,代码的可维护性是第一位的。”根据GitHub上发布的faster-cpython,香农计划分为四个阶段:Python3.10预计在今年10月发布,主要是增加一个自适应的、专门的解释器(interpreter)。解释器不是在运行时生成代码,而是利用程序中的类型稳定性,在执行期间调整类型和值。Python3.11Guido提议在3.11版本中实现至少2倍的加速。为此,他和几位Python开发人员提出了一项增强提案PEP659。该提案要求添加自适应字节码解释器并实现更高效的异常处理。除其他事项外,已提出优化帧堆栈、更改函数调用方式、添加优化以加快启动时间以及修改.pyc字节码缓存文件格式的工作。Python3.12这一阶段使用了小区域JIT解释器,在运行代码的时候可以简单快速的编译出小区域的专用代码。Python3.13还在代码运行时编译扩展区域,增强编译器实现5倍的超强加速。Guido表示,围绕性能的Python变化将主要服务于运行CPU密集型纯Python代码的开发者,以及内置Python网站的用户。在C语言代码(如NumPy和TensorFlow)、I/O绑定代码、多线程代码和算法代码中,提升效果会比较有限。微软回馈Python。事实上,微软长期以来一直以各种方式为Python项目提供帮助,包括在Azure云AI服务教程中发布免费的Python课程,通过VSCodePython扩展支持Win10及以上版本的Python。自2006年以来,微软也一直是Python软件基金会(PSF)的赞助商,今年捐助了150,000美元。目前在微软工作的Python开发者社区核心成员有5人,其中包括去年年底加入的Python之父,以及Shannon项目三人之一的EricSnow。Guido在这次峰会上还特意cue了微软,并提议微软资助一个Python小团队“负责语言解释层面的性能提升”,这样他就可以和微软的同事们一起继续开发Python。当然,对于3.11版本的短期目标,Guido在ppt中还是给了自己一个底线。△“乐观和好奇总是对的。”对于四年内速度翻五倍的最终目标,圭多表示,“我们必须保持旺盛的创造力。”