把Python当做一个高速语言有很多方法能用Python写出高速的代码。最流行而且仍在广泛传播的方法是,用底层语言来写应用里最复杂的部分,然后使用,这对python来说无疑是很不幸的事。 所有Python里出色的高效的工具都需要许多复杂的c代码,这阻碍了其他的贡献者进来。现在我们想要写出高速而且美观的python代码。 有很多工具可以把python代码编译成机器代码,比如:Nuitka, Python2C, Shedskin, pythran。我认为它们都是失败的,当你使用它们的时候,就需要跟动态行为说再见了。他们只支持一部分的python语言,并且离完全支持还有很大距 离。我甚至不认为以后他们能做到。另外他们也没有用那些使JIT(Just-In-Time 运行时编译执行)的解决方案变得出色的先进的技术和运行时信息。 |
多核编程这方面,Armins Rigo的文章写的很棒,可以参考:Multicore Programming in PyPy and CPython 解释器的设计
|
我们能做什么?
为何 PyPy 是趋势?PyPy为优化和进一步的语言开发提供了更好的架构。对于大部分Python已有的问题,PyPy已经提供了解决方案:
PyPy已经支持多平台 (x86, 64_x86, ARM) |
PyPy同时还包含了一个优秀的现代的架构,在 Jim Huang 的演讲 中做了介绍,演讲的要点是:
相信让所有软件支持PyPy需要付出艰巨的努力 - 需要在现有的库上做很多工作。不过使用新的工具,编写支持PyPy和CPython的软件会比采用C扩展的方式更简单一些(在我们能做什么一节有介绍)。 |
CPython遗留问题
|
不得不说Python的科学计算社区非常棒。他们非常关注于质量、易用性和推广他们的产品(为此组织了 很多会议:SciPy大会,PyData等)。感谢他们让Python成为免费的科学分析平台的首选。这里还需要提一下Travis Oliphant,他在社区中付出了很多努力,让整个平台协调一致。关于这些可以看一下这篇博客文章:为何Python是你最终必须学习的编程语言 PyPy呢?我希望PyPy当时并没有达到产品级可用。 后续关于本文的后续在Reddit上有一个有趣的讨论。这是关于在商业上应用PyPy的优缺点的讨论。讨论者总结了如何使用基于高性能库的PyPy。最重要的是使用PyPy软件栈(原始Python、cffi,等等)可以让维护和优化很简单(例如:延迟计算)。至于缺点,上面提到了,主要与CPython的遗留问题有关。 |