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()
他們收到什麼?廣播是否完成? – kraffenetti
爲什麼使用'mpi4py'而不是Python自帶的'multiprocessing'模塊? – hpaulj