以下是使用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