Ich habe keine gute Möglichkeit gefunden, die Speichernutzung eines Python-Skripts mit multiprocessing
zu überwachen. Genauer gesagt, sage ich dies tun:Python Multiprocessing - Wie überwacht man die Speichernutzung?
import time
biglist = range(pow(10, 7))
time.sleep(5)
Der Speicherverbrauch 1,3 GB ist, wie durch Messung /usr/bin/time -v
und top
. Aber jetzt, sage ich dies tun:
import time
from multiprocessing import Pool
def worker(x):
biglist = range(pow(10, 7))
time.sleep(5)
return
Pool(5).map(worker, range(5))
Jetzt top
Berichte 5 x 1,3 GB, was richtig ist. Aber /usr/bin/time -v
meldet immer noch 1,3 GB, was keinen Sinn ergibt. Wenn es den Verbrauch des Elternprozesses misst, sollte es 0 ergeben. Wenn es den Elternteil und die Kinder misst, sollte es 5 x 1,3 GB melden. Warum heißt es 1,3 GB? Lassen Sie uns copy-on-write Jetzt versuchen:
import time
from multiprocessing import Pool
biglist = range(pow(10, 7))
def worker(x):
time.sleep(5)
return
Pool(5).map(worker, range(5))
Jetzt /usr/bin/time -v
meldet 1,3 GB (wieder), was richtig ist. Aber top
meldet 6 x 1,3 GB, was falsch ist. Mit Copy-on-Write sollte es nur 1,3 GB melden.
Wie kann ich die Speicherauslastung eines Python-Skripts mithilfe von multiprocessing
zuverlässig überwachen?