5

我有一个用 python 编写的脚本,它运行良好,但我很想知道是否可以加快它的速度。它基本上是递归脚本。

如果我在普通的 python 2.7 中运行它,大约需要 30 秒。当我使用 pypy 运行相同的东西时,我收到以下错误:

RuntimeError: maximum recursion depth exceeded

我不确定 pypy 有什么不同,因为我没有修改脚本。

谁能帮我理解发生了什么?

更新:好的,我想通了。增加限制有帮助,但我认为我运行了错误的文件。我在 bin 目录下找到了一个名为 py.py 的文件,并且正在使用它。我不确定该文件的作用,但它比普通的 python 慢。我不得不搜索并找到'pypy-c'现在似乎可以工作。

4

1 回答 1

5

正如您在更新中建议的那样,您的问题是您使用的是 py.py (用于在 CPython 之上运行 PyPy 的解释器)。PyPy 通常比 CPython 具有更高的递归限制。可以使用增加sys.setrecursionlimit()递归限制,sys.getrecursionlimit()不提供实际的递归限制。

PyPy 1.6.0:

>>>> sys.getrecursionlimit()
100

>>>> def infinite(level=0):
....     print level
....     return infinite(level+1)
.... 

>>> infinite()
<snip>
1010
Traceback (most recent call last):
  File "<console>", line 2, in infinite
RuntimeError: maximum recursion depth exceeded

>>> sys.setrecursionlimit(sys.maxint)

>>> infinite()
<snip>
9769
zsh: segmentation fault  pypy
于 2011-09-24T19:22:35.987 回答