2013-12-17 64 views
2

我正在嘗試編寫兩個腳本,一個是master和一個worker,其中master腳本會產生worker的多個進程,然後是一個numpy數組給工人產生。從mpi4py的在線教程數量來看,我覺得我理解這個概念,但是我寫的任何測試代碼都不能成功地將數組發送給工作人員。我沒有收到錯誤,但他們從未收到數組。Python:使用mpi4py將數組與其他腳本進行播放

有人可以請給我一個清晰的例子,說明如何使用mpi4py,spawn和bcast將數組廣播到一些衍生工作者腳本?謝謝!

UPDATE:例:

主腳本:

#! /usr/bin/env python 
# master test 

import sys,time 
from mpi4py import MPI 
import numpy as np 

comm2 = MPI.COMM_WORLD 
rank  = comm2.Get_rank() 
mpisize = comm2.Get_size() 

initcomm = MPI.COMM_SELF.Spawn(sys.executable, \ 
          args=['test2.py'], \ 
          maxprocs=5) 

# Initialise the programs 
test = np.array([1,2,3], 'i') 
print("About to broadcast {0} from rank {1}".format(test, rank)) 
initcomm.Bcast([test, MPI.INT], root=0) 
initcomm.Disconnect() 

工人腳本:

#! /usr/bin/env python 
# child test 

import sys,time 
from mpi4py import MPI 
import numpy as np 

comm2 = MPI.COMM_WORLD 
rank  = comm2.Get_rank() 
mpisize = comm2.Get_size() 

initcomm = MPI.Comm.Get_parent() 

test = np.zeros(3, 'i') 
print("Bcast coming to rank {0}".format(rank)) 
initcomm.Bcast([test, MPI.INT], root=0) 
print("Received {0}".format(test)) 
initcomm.Disconnect() 
+0

他們收到什麼?廣播是否完成? – kraffenetti

+0

爲什麼使用'mpi4py'而不是Python自帶的'multiprocessing'模塊? – hpaulj

回答

1

您需要在主腳本改變BCAST到:

initcomm.Bcast([test, MPI.INT], root=MPI.ROOT) 

如果它設置爲0,主人會認爲遠程/工作組中的根目錄爲0,程序將掛起。