2013-04-08 3 views
1

Этот вопрос связан с previous question I asked, и это похоже на простой вопрос, но мне сложно найти полезную информацию или учебники по теме многопроцессорности.Комбинация выходных многопроцессорных python

Моя проблема заключается в том, что я хотел бы объединить полученные данные в один большой массив, а затем сохранить его в моем hdf-файле.

def Simulation(i, output): 
    # make a simulation which outputs it resutlts in A. with shape 4000,3 
    A = np.array([4000,3]) 

    output.put(A) 

def handle_output(output): 
    hdf = pt.openFile('simulation.h5',mode='w') 
    hdf.createGroup('/','data') 

    # Here the output should be joined somehow. 
    # I would like to get it in the shape [4000,3,10] 

    output.get() 
    hdf.createArray('/data','array',A) 
    hdf.close() 

if __name__ == '__main__': 
    output = mp.Queue()  
    jobs = [] 
    proc = mp.Process(target=handle_output, args=(output,)) 
    proc.start() 
    for i in range(10): 
     p = mp.Process(target=Simulation, args=(i, output)) 
     jobs.append(p)  
     p.start() 
    for p in jobs: 
     p.join() 
    output.put(None) 
    proc.join() 

ответ

4

Что вам действительно нужно многопроцессорной бассейн

Просто сделай что-то вроде:

def Simulation(i): 
    return output 

p = mp.Pool(16) 

result = p.map(Simulation,range(10)) 
result = np.array(result).reshape(...) 
p.close() 
p.join() 
+0

Простой и эффективный! – user2143958