CPython + Cython如果你在使用 C 拓展模块,CPython 就会使你最好的选择(可能你不知道这个术语,CPython 是你可以在 python.org 获得的解释器)。对大多数的情况而言性能至少合理些– 因为某些原因,一些人认为Python 开发团队不关心性能,这个一个谎言 – 而且即将会成为新的特性,因为 CPython 同时担当着语言规范的作用。
如果认为你的一些内循环代码确实需要提高些速度, Cython 是 CPython 的选择。Cython 会尽可能的将你的 Python 代码编译成 C 拓展代码。有若干种支持的方法可以产生更好的 C 代码,所以这取决于你需要怎样的 Cython 特性。Cython 同时也使写出 C 拓展模块更加简单(但要继续读下去,除了CPython 还有其他的选择)。 PyPy + cffi如果你不依赖于已存在的 C 拓展模块,PyPy 会给你提供总体上最好的性能。它的JIT非常好而且它的团队欢迎受到使用 CPython 并且运行更快的代码的挑战,因为他们痛恨在 speed.pypy.org 中显示的那么慢。实话说,除非PyPy不支持你真的想用的那个版本的 Python – 因为 PyPy 确实会落后2个版本, 比如pypy3 现在支持 Python 3.2 然而 3.4 是最新的 CPython 发布版; 它们期盼在这个问题上能得到帮助(donation) – 我只能考虑不使用PyPy因为你依赖于已存在的C拓展模块C( numpy 是最常见的问题,虽然 PyPy is looking for donations 可修复这个问题)。 但这不意味着,如果你想封装一些C代码就用不了PyPy。PyPy项目还有另外一个子项目cffi,这个项目的目的是使Python代码也可以利用封装的C代码。使用cffi的关键好处在于,一旦你使用了cffi,C代码就可以用于CPython和PyPy(我认为IronPython和Jython也在添加对cffi的支持)。所以如果你在封装C代码,我强烈建议你看下cffi,而不是手动写C扩展模块或者使用Cython,这样你有更好的Python实现的支持,还能使用PyPy。 Numba如果你在做数值相关的工作,你肯定应该考虑Numba这个选择。在科学计算上,经济学家注意到了它的性能。虽然在普通的Python编程上,它不能帮到什么忙,但是如果在Python非常强大的科学计算栈中用到了numpy或者其他模块,Numba使用LLVM来进行JIT肯定会有帮助。 未来的 Python考虑到所有内容,Python肯定不是停滞不前的(Go也没有,比如它们都在忙于用Go重写编译器和将连接器以外的东西转移进编译器来获得更快的编译速度)。Python 的未来看起来还是光明的。 生产率Python 是一种在进化的语言。不像 Go,Python 乐于改变该语言,甚至是以永远不再向后兼容的方式。这意味着Python会比Go更快的速度变得更加高效(虽然在Go 2开发之前Go的团队对该语言进化持哪种观点还是未知的)。 在工具方面,标准化的 函数注解 是为了声明类型。 这是在 PyCon 2014 语言峰会期间提出的,针对函数参数和返回值,里面提到有大量的项目现在想要有一种声明预期类型的方法,使用函数注解考虑到了在某些方面的标准化,最终可能对标准库函数也会是有用的。在pytypedecl的邮件列表上的讨论还没有开始,但是我知道PEP大概是要开始了。不仅仅是对像Cython和Numba这样的项目在什么地方使用打印信息,还包括在诸如代码分析,重构等的时候使用。 性能
|