2012-04-22 13 views
9

In uno script Python, voglio impostare un limite di memoria per una determinata chiamata di funzione. Ho guardato a how to limit heap size; tuttavia, non voglio limitare la memoria dell'intero processo Python in esecuzione, vale a dire l'impostazione del limite di memoria prima e dopo la chiamata alla funzione.Python: impostazione del limite di memoria per una particolare chiamata di funzione

Esiste un modo per effettuare una chiamata di funzione con una determinata quantità di memoria, in modo che il limite di memoria non influisca sul chiamante?

+9

Apre un nuovo processo e limita la dimensione dell'heap. – JBernardo

+2

Oppure, in teoria, puoi anche ispezionare il frame corrente e costruire ricorsivamente un albero con tutti gli oggetti al suo interno e stimare la memoria utilizzata, ma non è semplice. Controlla come i profiler di memoria come guppy.heapy lo fanno. –

+5

Ma la vera domanda è, perché vuoi farlo? Non c'è una funzione integrata per questo, quindi forse ti stai avvicinando al problema nel modo sbagliato. –

risposta

2

No, questo è impossibile. Python non tiene traccia di quali funzioni sono responsabili per l'allocazione di nuova memoria, né di libc, quindi non c'è modo di limitare l'utilizzo della memoria solo con una singola funzione.

Per fare ciò è necessario modificare Python in modo da utilizzare una nuova funzione per allocare memoria che richiede di specificare quale funzione Python è responsabile, in modo che possa rifiutare l'allocazione di memoria se tale funzione va oltre il suo limite.

L'unico altro modo per farlo sarebbe effettivamente quello di eseguire la funzione in un processo separato con memoria limitata, come ha detto @JBernardo.

Come per l'implementazione di sandbox, esistono già implementazioni relativamente ben testate. C'è qualche ragione per cui non puoi usare quelli? In particolare, vedere PyPy's sandboxed VM e Zope sandbox.

Problemi correlati