我正在實現一個工作流程,該工作流程的一部分是調用一個python腳本,並在該python腳本中讓每個級別運行一個可執行文件或python程序。MPI對一個進程分級
所以要測試我寫了一個簡單的程序,但它不能正常工作。下面的代碼描述:
helloworld.py
from mpi4py import MPI
import sys
import subprocess
mpi_warn_on_fork = 0
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
for i in range(size):
if rank == i:
command = "python hello.py %d %d %s" % (rank, size, name)
subprocess.call("command", shell = True)
hello.py
import sys
print "Hello from rank = %s of %s on host %s" %(sys.argv[1], sys.argv[2], sys.argv[3])
我通過使用調用程序: 的mpirun -np 16蟒helloworld.py
但是這個實現並不起作用,因爲只有一個等級中的16個爲mpirun運行時生成一個生成戰爭的進程ning有關在程序中使用fork的消息。
有人可以請推薦一些東西,這樣我可以允許每個MPI級別正確執行shell命令。
編輯: 在C/C++中實現這個想法的建議也可以使用。
不要使用'shell = True';只需編寫'subprocess.check_call([「python」,「hello.py」,str(rank),str(size),name])''。 –
如果在運行該命令之前,您確實不需要使用通信器進行操作,那麼甚至可以使用沒有MPI庫的Python或甚至是shell腳本來執行MPI程序。 –