2012-04-14 28 views
7

estoy usando Python 2.7.2 en Mac OS 10.7.3ValueError Python: No se permite elevar límite máximo

que estoy haciendo un algoritmo recursivo en python con más de 50 000 niveles de recursión.

Intenté aumentar el nivel de recursión máximo a 1 000 000 pero mi shell de python todavía sale después de 18 000 niveles de recursión.

Me trataron de aumentar los recursos disponibles:

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

y me sale este error:

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 

No sé por qué no puedo aumentar el límite máximo?

gracias por sus sugerencias.

+0

la versión/os? – fabrizioM

Respuesta

6

A partir de la documentación de Python:

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.

De esta supongo que su intento nuevo límite blando es demasiado grande. Probablemente necesites volver a escribir tu algoritmo para que sea iterativo. Python no está diseñado para manejar recursiones masivas como esta.

+0

thx, lo hice iterativamente, python no está diseñado para un algoritmo recursivo tan grande –

1

Si bien es probable que sea una mejor idea escribir un algo más eficaz, puede aumentar el límite al ejecutar python como root (como se menciona en los documentos).

Si se ejecuta como root, en realidad se puede ajustar el tamaño de la pila a un número ilimitado con la siguiente línea:

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