我期待着给现有的应用带来速度的改进,我正在寻找关于我可能的选择的建议。该应用程序是用Python编写的,使用wxPython,并与py2exe
打包(我只针对windows平台)。应用程序的某些部分是计算密集型的,在解释的Python中运行得太慢。我不熟悉C,所以移植代码的部分对我来说并不是一种选择。
因此,我的问题基本上是,我是否有一个清晰的画面,我的选择,我在下面概述,或我是否从错误的方向来处理这个问题?
发布于 2012-06-09 03:44:11
使用PyPy确实排除了py2exe和类似的工具,至少在移植之前是这样的(AFAIK在这方面没有有效的工作)。不过,由于不需要安装PyPy二进制文件,您可能会有一个更复杂的发行版,它包括您的PyPy源代码和PyPy binary+stdlib,并且使用一个小包装器(批处理文件、可执行文件)来简化启动。我不能评论WxPython on PyPy是否已经成熟到可以使用,但是如果您描述您的情况,也许pypy、wxpython或任何一个IRC通道上的某个人可以给出建议。
在我看来,将您的代码转换为RPython是不可行的。翻译工具链实际上不是一个用于通用开发的工具,生成一个用于嵌入/ctype的C dll似乎并不简单。而且,RPython代码实际上是低级别的,使您的Python代码受到足够的限制可能相当于重写其中的一半。
至于其他受限制的选项:您似乎把CPython (用C编写的原始Python解释器)和Cython (一种类似Python的语言的编译器,它发射适合于CPython扩展模块的C代码)混为一谈。这两个项目都很活跃。我对Shedskin不是很熟悉,但它似乎是一个开发整个程序的工具,很少或根本没有与非受限Python代码的交互。Cython似乎更合适:虽然它需要手动类型注释和低级代码才能获得真正好的性能,但是从Python中使用它是很简单的:项目的目的就是生成扩展模块。
发布于 2012-06-09 04:37:55
我肯定会研究Cython,我一直在玩它,并且看到了比纯python快100倍的速度。首先使用配置文件模块查找瓶颈。通常,当去Cython时,循环是提高速度的最大机会。您还应该查看是否可以在Numpy中而不是循环中使用数组/向量操作,如果是这样的话,也会给性能带来极大的提升。例如:
a = range(1000000)
for i in range(len(a)):
a[i] += 5
很慢真的很慢。另一方面:
a = numpy.arange(10000000)
a = a +5
很快,真的很快。
https://stackoverflow.com/questions/10960576
复制相似问题