首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PyPy或Shedskin加快现有Python的部分速度

使用PyPy或Shedskin加快现有Python的部分速度
EN

Stack Overflow用户
提问于 2012-06-09 11:23:28
回答 2查看 1.8K关注 0票数 5

我期待着给现有的应用带来速度的改进,我正在寻找关于我可能的选择的建议。该应用程序是用Python编写的,使用wxPython,并与py2exe打包(我只针对windows平台)。应用程序的某些部分是计算密集型的,在解释的Python中运行得太慢。我不熟悉C,所以移植代码的部分对我来说并不是一种选择。

因此,我的问题基本上是,我是否有一个清晰的画面,我的选择,我在下面概述,或我是否从错误的方向来处理这个问题?

  • 与Pypy一起运行:今天,我开始试验pypy --结果令人兴奋,因为我可以从pypy解释器运行大部分代码,并且我看到了5x+速度的提高,没有任何代码更改。但是,如果我正确理解,(a)支持wxpython的Pypy是仍在进行中,(b) i 无论如何,无法将其编译到exe以进行分发。。所以,除非我搞错了,这对我来说似乎是不允许的?没有办法打包东西,所以它的一部分用pypy执行?
  • 将代码转换为RPython,并使用pypy进行翻译,因此下一个选项似乎实际上是将部分代码重写为pypy受限语言,这似乎是一项相当大的工作。但是如果我这样做,那么代码的一部分就可以编译成可执行文件(?)然后我可以通过ctype (?)访问代码。
  • 其他受限选项 Shedskin在这里似乎是一种流行的选择,这更适合我的需求吗?其他选项似乎是Cpython、Psyco和Unladen,但它们都已被取代或不再维护。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-09 11: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中使用它是很简单的:项目的目的就是生成扩展模块。

票数 6
EN

Stack Overflow用户

发布于 2012-06-09 12:37:55

我肯定会研究Cython,我一直在玩它,并且看到了比纯python快100倍的速度。首先使用配置文件模块查找瓶颈。通常,当去Cython时,循环是提高速度的最大机会。您还应该查看是否可以在Numpy中而不是循环中使用数组/向量操作,如果是这样的话,也会给性能带来极大的提升。例如:

代码语言:javascript
复制
a = range(1000000)
for i in range(len(a)):
    a[i] += 5

很慢真的很慢。另一方面:

代码语言:javascript
复制
a = numpy.arange(10000000)
a = a +5

很快,真的很快。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10960576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档