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