Non ho trovato un buon modo per monitorare l'utilizzo della memoria di uno script Python utilizzando multiprocessing
. Più specificamente, dire fare questo:Multiprocessing di Python - Come monitorare l'utilizzo della memoria?
import time
biglist = range(pow(10, 7))
time.sleep(5)
L'utilizzo della memoria è di 1,3 GB, determinata sia /usr/bin/time -v
e top
. Ma ora, dico faccio questo:
import time
from multiprocessing import Pool
def worker(x):
biglist = range(pow(10, 7))
time.sleep(5)
return
Pool(5).map(worker, range(5))
Ora top
report 5 x 1,3 GB, che è corretto. Ma /usr/bin/time -v
riporta ancora 1,3 GB, il che non ha senso. Se misura il consumo del processo genitore, allora dovrebbe dire 0. Se sta misurando il genitore ei figli, dovrebbe riportare 5 x 1,3 GB. Perché dice 1,3 GB? Ora proviamo copy-on-write:
import time
from multiprocessing import Pool
biglist = range(pow(10, 7))
def worker(x):
time.sleep(5)
return
Pool(5).map(worker, range(5))
Ora /usr/bin/time -v
riporta 1,3 GB (di nuovo), che è corretto. Ma i report top
6 x 1,3 GB, che non è corretto. Con copy-on-write, dovrebbe riportare solo 1,3 GB.
Come posso monitorare in modo affidabile l'utilizzo della memoria di uno script Python utilizzando multiprocessing
?