Possiedo un'applicazione Python intensiva della memoria (tra centinaia di MB e diversi GB).
Ho un paio di eseguibili Linux MOLTO PICCOLI che l'applicazione principale deve eseguire, ad es.Comprensione degli errori di allocazione di memoria e fork di Python
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
Quando si esegue queste utilità esterne (una volta, alla fine del lungo periodo processo principale) utilizzando subprocess.Popen
talvolta vengono OSError: [Errno 12] Cannot allocate memory
.
Non capisco perché ... Il processo richiesto è minuscolo!
Il sistema ha memoria sufficiente per molte altre shell.
Sto usando Linux (Ubuntu 12.10, 64 bit), quindi suppongo chiamate di subprocesso Fork.
E Fork forchetta il mio processo esistente, raddoppiando così la quantità di memoria consumata, e non riesce ??
Cosa è successo a "copia su scrittura"?
È possibile generare un nuovo processo senza fork (o almeno senza copiare memoria - avvio nuovo)?
correlati:
The difference between fork(), vfork(), exec() and clone()
fork() & memory allocation behavior
Python memory allocation error using subprocess.Popen
[Hai letto questa risposta alla domanda correlata] (http://stackoverflow.com/a/13329386/4279)? – jfs
Ho, grazie. Ci sono alcune soluzioni alternative valide, alcune delle quali posso usarle. Speravo in una soluzione reale: la possibilità di generare un nuovo processo all'interno di Python che non copi tutta la memoria del processo alla fine. –