Eseguo Python 2.7 su una macchina Linux con RAM da 16 GB e sistema operativo a 64 bit. Uno script python che ho scritto può caricare troppi dati in memoria, il che rallenta la macchina fino al punto in cui non posso nemmeno più uccidere il processo.Utilizzo della memoria limite?
Mentre posso limitare la memoria chiamando:
ulimit -v 12000000
nel mio guscio prima di eseguire lo script, mi piacerebbe includere un'opzione di limitare nello script stesso. Ovunque guardassi, il modulo resource
è citato come avente la stessa potenza di ulimit
. Ma chiamando:
import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))
all'inizio del mio script non fa assolutamente nulla. Anche impostando il valore a partire da 12000 non si è mai verificato un crash del processo. Ho provato lo stesso con RLIMIT_STACK
, con lo stesso risultato. Curiosamente, chiamando:
import subprocess
subprocess.call('ulimit -v 12000', shell=True)
non fa niente.
Cosa sto sbagliando? Non sono riuscito a trovare alcun esempio di utilizzo effettivo online.
C'è spazio per rendere il programma più efficiente in termini di memoria? – TigerhawkT3
C'è, ma ci vorrà un po '. Al momento, ho bisogno di testarlo e assicurarsi che non spenga il computer. E avere una sicurezza per la memoria sarà utile anche in seguito. – Arne
Dato che è in Python 2.7, che ne dici di passare a Python 3 e usare un convertitore 2-a-3 sul tuo programma? Python 3 ha diversi miglioramenti delle prestazioni rispetto a Python 2, alcuni dei quali sono legati alla memoria. – TigerhawkT3