Python调用执行MPI
import os
import subprocess
print("-------------------------------------")
ip_other = input("please input other host's ip:")
print("-------------------------------------")
def over_write_config():
mpi_config = '/mpifile/ex/mpi_config'
with open(mpi_config, 'r', encoding='utf-8') as f:
ips = f.read().split('\n')
del ips[len(ips) - 1]
for i in range(len(ips)):
ips[i] = ips[i][:-2]
new_ips = []
for i, ip in enumerate(ips):
try:
p = subprocess.call('ping -c 1 ' + ip, shell=True, timeout=1)
except subprocess.TimeoutExpired:
continue
if p == 0:
new_ips.append(ip)
with open(mpi_config, 'w', encoding='utf-8') as f:
for ip in new_ips:
f.write(ip + ':' + str(1) + '\n')
print('File mpi_config is updated!')
cmd4 = 'tar czf - /mpifile/ex/mpi_config | ssh root@' + ip_other + ' tar xzf - -C /'
try:
p = subprocess.call('ping -c 1 ' + ip_other, shell=True, timeout=1)
except subprocess.TimeoutExpired:
print('IP ' + ip_other + ' can not be connectted!')
return
os.system(cmd4)
run_file = input("please input run file's name:")
print("-------------------------------------")
flag=0
while flag==0:
cmd = 'mpiexec -n 20 -f /mpifile/ex/mpi_config /mpifile/ex/'+run_file
p = subprocess.Popen(cmd, shell=True)
try:
p.wait(3)
except subprocess.TimeoutExpired:
print('Some containers may not running! please check it!')
p.kill()
over_write_config()
continue
flag=1
print("-------------------------------------")
print("Program is executed Successfully!")