我有一个我在python中编写的脚本,它工作正常,但我很好奇,看看我是否可以加快它。它基本上是递归脚本。
如果我在普通的python 2.7中运行它,大约需要30秒。当我使用pypy运行相同的东西时,我得到以下错误:
RuntimeError: maximum recursion depth exceeded
我不确定pypy的做法有何不同,因为我没有修改脚本。
任何人都可以帮我理解发生了什么吗?
更新: 好吧我明白了。增加限制有帮助,但我认为我运行了错误的文件。我在bin目录下找到了一个名为py.py的文件并正在使用它。我不确定该文件的作用,但它比普通的python慢。我不得不搜索并发现'pypy-c'现在似乎正常工作。
答案 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