2012-04-14 6 views
7

Ich verwende Python 2.7.2 auf Mac OS 10.7.3Python Valueerror: nicht Höchstgrenze

Ich mache einen rekursiven Algorithmus in Python mit mehr als 50 000 Rekursionsebenen zu erhöhen erlaubt.

Ich habe versucht, die maximale Rekursionsebene auf 1 000 000 zu erhöhen, aber meine Python-Shell wird immer noch nach 18 000 Rekursionsebenen beendet.

Ich habe versucht, die Ressourcen zu erhöhen, zur Verfügung:

import resource 
resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1)) 
sys.setrecursionlimit(10**6) 

und ich bekomme diese Fehlermeldung:

Traceback (most recent call last): 
    File "<pyshell#58>", line 1, in <module> 
    resource.setrlimit(resource.RLIMIT_STACK,(2**29,-1)) 
ValueError: not allowed to raise maximum limit 

Ich weiß nicht, warum ich die Höchstgrenze nicht erhöhen können?

danke für Ihre Vorschläge.

+0

welche Version/os? – fabrizioM

Antwort

6

Von der Python-Dokumentation:

Raises ValueError if an invalid resource is specified, if the new soft limit exceeds the hard limit, or if a process tries to raise its hard limit (unless the process has an effective UID of super-user). Can also raise error if the underlying system call fails.

Daraus Ich denke, dass Ihr Versuch, neue weiche Grenze zu groß ist. Sie müssen wahrscheinlich Ihren Algorithmus neu schreiben, um iterativ zu sein. Python ist nicht wirklich darauf ausgelegt, eine solche massive Rekursion zu bewältigen.

+0

thx, ich habe es iterativ gemacht, Python ist nicht für solch einen großen rekursiven Algorithmus ausgelegt –

1

Während es wahrscheinlich eine bessere Idee ist, einen effektiveren Algorithmus zu schreiben, können Sie das harte Limit erhöhen, indem Sie python als root ausführen (wie in den Dokumenten erwähnt).

Wenn Sie als root ausführen, können Sie die Stapelgröße auf unbegrenzt eingestellt tatsächlich mit der folgenden Zeile:

import resource 
resource.setrlimit(resource.RLIMIT_STACK, (resource.RLIM_INFINITY, resource.RLIM_INFINITY))