2012-04-14 18 views
7

sto usando Python 2.7.2 su Mac OS 10.7.3Python ValueError: non ha permesso di aumentare limite massimo

Sto facendo un algoritmo ricorsivo in pitone con più di 50 000 livelli di ricorsione.

Ho provato ad aumentare il livello di ricorsione massimo a 1 000 000 ma il mio guscio di pitone esce ancora dopo 18.000 livelli di ricorsione.

ho cercato di aumentare le risorse disponibili:

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

e ottengo questo errore:

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 

Non so perché non posso alzare il limite massimo?

grazie per i vostri suggerimenti.

+0

quale versione/os? – fabrizioM

risposta

6

Dalla documentazione 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.

Da questo immagino che il tuo nuovo limite soft tentativo è troppo grande. Probabilmente hai bisogno di riscrivere l'algoritmo per essere iterativo. Python non è davvero progettato per gestire una ricorsione di massa come questa.

+0

thx, l'ho fatto in modo iterativo, python non è progettato per un algoritmo ricorsivo così ampio –

1

Mentre è probabilmente una buona idea scrivere un algoritmo più efficiente, è possibile aumentare il limite rigido eseguendo python come root (come menzionato nei documenti).

Se si esegue come root, si può effettivamente impostare la dimensione dello stack per illimitata con la seguente riga:

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