Nie znalazłem dobrej metody monitorowania użycia pamięci skryptu Python przy użyciu multiprocessing
. Dokładniej, np zrobić to:Python multiprocessing - Jak monitorować użycie pamięci?
import time
biglist = range(pow(10, 7))
time.sleep(5)
Wykorzystanie pamięci 1,3 GB, mierzona zarówno /usr/bin/time -v
i top
. Ale teraz, powiedz mi to zrobić:
import time
from multiprocessing import Pool
def worker(x):
biglist = range(pow(10, 7))
time.sleep(5)
return
Pool(5).map(worker, range(5))
Teraz top
raporty 5 x 1,3 GB, co jest poprawne. Ale /usr/bin/time -v
nadal zgłasza 1,3 GB, co nie ma sensu. Jeśli mierzy zużycie procesu nadrzędnego, wówczas powinno oznaczać 0. Jeśli mierzy rodzica i dzieci, powinien zgłosić 5 x 1,3 GB. Dlaczego mówi 1,3 GB? Teraz spróbujmy kopiowanie przy zapisie:
import time
from multiprocessing import Pool
biglist = range(pow(10, 7))
def worker(x):
time.sleep(5)
return
Pool(5).map(worker, range(5))
teraz /usr/bin/time -v
donosi 1,3 GB (ponownie), co jest poprawne. Ale top
zgłasza 6 x 1,3 GB, co jest nieprawidłowe. W przypadku kopiowania przy zapisie powinno to wynosić tylko 1,3 GB.
Jak mogę niezawodnie monitorować wykorzystanie pamięci skryptu Python przy użyciu multiprocessing
?