以下是使用python進行多處理的示例程序。我發現每個進程的內存使用量比每個進程應該使用的內存高出2到3倍。如果我只用一個進程來計算,所用的內存就會多1.3倍,並且隨着進程數量的增加而增加。Python多處理內存管理多維數組上的循環
例如,對於帶有float64的1000 * 1000 * 1000的數組,它應該使用8Gb的內存,但我看到內存高達25Gb,並行運行8個處理器!但我讀過多處理使用共享內存。所以我不確定內存在哪裏泄漏。這裏是代碼:
#To use the code, please take care of your RAM.
#If you have higher RAM, kindly try for the bigger arrays to see the difference clearly.
from numpy import *
import multiprocessing as mp
a = arange(0, 2500, 5)
b = arange(0, 2500, 5)
c = arange(0, 2500, 5)
a0 = 540. #random values
b0 = 26.
c0 = 826.
def rand_function(a, b, c, a0, b0, c0):
Nloop = 100.
def loop(Nloop, out):
res_total = zeros((500, 500, 500), dtype = 'float')
n = 1
while n <= Nloop:
rad = sqrt((a-a0)**2 + (b-b0)**2 + (c-c0)**2)
res_total = res_total + rad
n +=1
out.put(res_total)
out = mp.Queue()
jobs = []
Nprocs = mp.cpu_count()
print "No. of processors : ", Nprocs
for i in range(Nprocs):
p = mp.Process(target = loop, args=(Nloop/Nprocs, out))
jobs.append(p)
p.start()
final_result = zeros((500,500,500), dtype = 'float')
for i in range(Nprocs):
final_result = final_result + out.get()
p.join()
test = rand_function(a,b,c,a0, b0, c0)
任何人都可以請告訴我哪裏的內存泄漏?以及如何克服?非常感謝你提前。
您認爲這是「應該使用」多少?爲什麼? –
例如,對於1000 * 1000 * 1000的數組,應該爲float64使用(1000 * 1000 * 1000 * 8)/(1024 ** 3)Gb的內存。對?我也通過給出一個.nbytes來驗證,你會知道使用的內存。 – geekygeek
Just jound this:included into Python 3.4 [tracemalloc](http://docs.python.org/3.4/library/tracemalloc.html) – User