2015-03-19 64 views
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 

回答

-2

你釀出「sys.executable」這是碩士課程。您需要指定工作程序的名稱。

+1

謝謝,但你可以在如何這樣做更具說服力。我認爲把參數:'args = ['worker.py']'正是你所提到的? – Yvus 2016-06-01 14:50:07

+0

我也對此感到好奇 – kilojoules 2016-08-01 17:45:37

+0

因此,你不喜歡我,因爲你不明白我的答案? 「args」參數是您爲啓動的可執行文件提供的命令行參數。而您啓動的可執行文件仍然是「sys.executable」。所以,實際上你發出commandling: master.py worker.py 看到了嗎?你正在用worker的名字作爲參數來調用master程序。 – 2016-10-27 17:36:52