5

私はPythonで書いたスクリプトを持っていて、それはうまく機能しますが、私はそれをスピードアップできるかどうか知りたいと思っていました。基本的には再帰的なスクリプトです。

通常のPython2.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 に答える