Python的运行速度不如C或Java,但是有一些项目致力于使Python更快。Python代码简洁干净,但大家都知道Python运行速度相对较慢---在CPU密集型任务上比C、Java和Javascript慢(但大多数服务不是CPU密集型)---但有些团队希望Python是尽善尽美,因此他们已准备好从内到外提高Python性能。如果您希望Python在特定硬件上运行得更快一些,您至少有两个选择,每个都有一些缺点:您可以创建一个替代的Python运行时,但您最终将重新编写CPython。您可以重写部分现有代码以利用一些性能优化功能,但缺点是程序员需要做更多的工作。以下是帮助您提高Python性能的五个现有解决方案。1.PyPy在CPython的替代品中,PyPy是最突出的(例如,Quora在生产中使用它)。它也有成为默认解释器的最佳机会,它与现有的Python代码高度兼容。PyPy使用即时编译来加速Python,谷歌也在使用这项技术,谷歌用它来加速V8引擎中的Javascript。最新版本PyPy2.5添加了一些性能增强功能,其中之一是流行的Numpy集成,它也被用于加速Python。使用Python3的代码需要相应地使用PyPy3。PyPy目前只支持Python3.2.5,对Python3.3的支持正在进行中。2.PystonPyston,由Dropbox资助,使用LLVM编译器架构来加速Python,因为它也使用即时编译。与PyPy相比,Pyston还处于早期阶段,它只支持Python的部分特性。Pyston将工作分为两部分,一部分是语言的核心特性,另一部分是将性能提升到可接受的水平。Pyston距离准备好用于生产还有一段距离。3、除了用Nuitka替换Python运行时,一些团队尝试将Python代码转换成其他语言的代码,可以在本地高效运行。其中一个著名的项目是Nuitka——将Python代码转换为C++代码——尽管运行时仍然依赖于Python运行时。这限制了它的便携性,但性能提升是相当可观的。在长远的计划中,Nuitka还准备让C语言调用Nuitka编译的Python代码,这样性能提升会更加明显。4、CythonCython(Python的C语言扩展)是Python的超集,可以将Python代码编译成C代码,并与C、C++进行交互。它可以用作Python项目的扩展(重写性能关键部分),或者单独使用,不涉及传统的Python代码。缺点是不是用Python写的,需要手动迁移,缺乏可移植性。话虽这么说,Cython提供了使代码更高效的功能,例如变量类型,这本质上是C所需要的。某些科学计算包(如scikit-learn)依赖Cython的某些功能来保持操作简单和快速。5.NumbaNumba结合了以上几个项目的思想。在学习Cython之后,Numba也采用了部分加速的策略,只对CPU密集型任务进行加速;同时学习了PyPy和Pyston,通过LLVM跑Python。您可以使用装饰器来指定要使用Numba编译的函数。Numba继承了Numpy来加速函数的执行。Numba不会及时编译,它的代码是预编译的。Python之父说:大多数感觉Python慢??的应用,都是没有正确使用Python。有多种方法可以提高CPU密集型任务的性能——使用Numpy进行计算、调用外部C代码以及尽量避免GIL锁。由于目前无法更换GIL锁,所以很多项目开始尝试一些短期可行的替代方案,当然这些方案也有可能转化为长期方案。
