python好难啊,Python简单吗
Python的运行速度没有C或Java快,但一些项目正试图让Python更快。
Python的代码简洁干净,但是大家都知道Python的运行速度相对较慢——在CPU密集型的任务中比C、Java、Javascript慢(但是大部分服务都不是CPU密集型的)——但是有些团队希望Python尽善尽美,所以他们准备从内到外提升Python的性能。
如果您希望Python在特定硬件上运行得更快,您至少有两种选择,每种选择都有一些缺点:
A.你可以创建Python运行时的替代品,但最后你会发现你又重写了CPython。
B.您可以重写一些现有的代码,以利用一些性能优化特性。缺点是程序员需要做更多的工作。
这里有五个现有的方案可以帮助你提高Python的性能。
PyPy
在CPython的替代品中,PyPy是最引人注目的一个(例如,Quora在生产环境中使用它)。它也最有可能成为默认解释器。它与现有的Python代码高度兼容。
PyPy使用即时编译来加速Python。这项技术也被Google使用,在V8引擎中使用它来加速Javascript。PyPy2.5的最新版本增加了一些性能增强特性,其中一个非常受欢迎。它集成了Numpy,这是以前用来加速Python的。
使用Python3的代码需要相应地使用PyPy3。PyPy目前只支持Python3.2.5,对Python3.3的支持正在进行中。
Pyston
由Dropbox资助的Pyston使用LLVM编译器架构来加速Python,它还使用即时编译。与PyPy相比,Pyston还处于早期阶段,它只支持Python的一些特性。Pyston将工作分为两部分,一是语言的核心特性,二是将性能提高到可以接受的水平。Pyston要在生产环境中使用还有很长的路要走。
Nuitka
除了替换Python运行时之外,一些团队还试图将Python代码转换成可以在本地高效运行的其他语言的代码。其中一个著名的项目是Nuitka——将Python代码转换成C代码——尽管运行时仍然依赖于Python运行时。这限制了它的可移植性,但性能提升是相当可观的。在长期规划中,Nuitka还打算启用C语言调用Nuitka编译的Python代码,这样性能提升会更明显。
Cython
cy thon(Python的C语言扩展)是Python的超集,可以将Python代码编译成C代码,与C、C交互,可以作为Python项目的扩展(性能要求高的部分),也可以单独使用,不涉及传统的Python代码。缺点是你没写Python,需要手动迁移,缺乏可移植性。
据说Cython提供了一些让代码更高效的特性,比如变量类型化,这是c语言本质上需要的,一些科学计算包,比如scikit-learn,依靠Cython的一些特性来保持操作简洁快速。
Numba
Numba结合了以上项目的思路。Numba在学习Cython之后,也采用了部分加速的策略,只加速CPU密集型的任务;同时它学习了PyPy和Pyston,通过LLVM运行Python。你可以使用一个装饰器来指定你想用Numba编译的函数。Numba继承了Numpy来加速函数的执行。Numba不能及时编译,但是它的代码是预编译的。
Python之父说:大部分认为Python慢的应用都没有正确使用Python。提高CPU密集型任务性能的方法有很多——使用Numpy进行计算,调用外部C代码,尽可能避免GIL锁。由于GIL船闸目前无法替代,很多项目已经开始尝试一些短期可行的替代方案,当然这些替代方案也有可能变成长期替代方案。
在这里还是要推荐下我自己建的Python开发学习群:1156465813,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。