2015-03-19 71 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