2
我的目標是有一個python腳本能夠在不同的進程啓動其他的Python腳本,即我想要N個進程spreadthe腳本。嘗試實現我試圖運行文檔中給出的mpi4py spawn示例(請參閱http://mpi4py.scipy.org/docs/usrman/tutorial.html)。但是此示例失敗並顯示以下消息:mpi4py產卵通信失敗7
至少有一對MPI進程無法互相訪問以進行MPI通信。這意味着......這個錯誤有時可能是因忘記指定'自我'BTL而導致的。 ...您的MPI工作 現在將中止。
我的安裝是在windows 7上安裝了openMPI 1.6.1和最新的mpi4py安裝。
的代碼,在我的情況是: master.py:
#!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys
comm = MPI.COMM_SELF.Spawn(sys.executable,
args=['worker.py'],
maxprocs=5)
N = numpy.array(100, 'i')
comm.Bcast([N, MPI.INT], root=MPI.ROOT)
PI = numpy.array(0.0, 'd')
comm.Reduce(None, [PI, MPI.DOUBLE],
op=MPI.SUM, root=MPI.ROOT)
print(PI)
comm.Disconnect()
worker.py:
#!/usr/bin/env python
from mpi4py import MPI
import numpy
comm = MPI.Comm.Get_parent()
size = comm.Get_size()
rank = comm.Get_rank()
N = numpy.array(0, dtype='i')
comm.Bcast([N, MPI.INT], root=0)
h = 1.0/N; s = 0.0
for i in range(rank, N, size):
x = h * (i + 0.5)
s += 4.0/(1.0 + x**2)
PI = numpy.array(s * h, dtype='d')
comm.Reduce([PI, MPI.DOUBLE], None,
op=MPI.SUM, root=0)
comm.Disconnect()
產生錯誤的行是:
comm = MPI.COMM_SELF.Spawn(sys.executable,
args=['worker.py'],
maxprocs=5)
的命令運行該腳本是在cmd提示符下:
mpirun -n 1 python.exe master.py
謝謝,但你可以在如何這樣做更具說服力。我認爲把參數:'args = ['worker.py']'正是你所提到的? – Yvus 2016-06-01 14:50:07
我也對此感到好奇 – kilojoules 2016-08-01 17:45:37
因此,你不喜歡我,因爲你不明白我的答案? 「args」參數是您爲啓動的可執行文件提供的命令行參數。而您啓動的可執行文件仍然是「sys.executable」。所以,實際上你發出commandling: master.py worker.py 看到了嗎?你正在用worker的名字作爲參數來調用master程序。 – 2016-10-27 17:36:52