pypy如何处理递归?

时间:2011-09-24 18:19:06

标签: python pypy

我有一个我在python中编写的脚本,它工作正常,但我很好奇,看看我是否可以加快它。它基本上是递归脚本。

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

RuntimeError: maximum recursion depth exceeded

我不确定pypy的做法有何不同,因为我没有修改脚本。

任何人都可以帮我理解发生了什么吗?

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

1 个答案:

答案 0 :(得分:4)

正如您在更新中建议的那样,您的问题是您使用的是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