【发布时间】:2019-11-05 15:25:13
【问题描述】:
我正在尝试在已通过控制台、jupyter 笔记本或 Pycharm 控制台运行的 python 代码上运行 mpirun。所有代码运行正常,直到调用 mpirun 进程,该进程完全跳过。
我创建了两个代码,parallel.py,其中包含要由 mpirun 执行的操作;和coder.py,它调用parallel.py。运行coder.py 时,除了对parallel.py 的调用外,所有关键步骤都会运行。单独运行parallel.py时,代码运行正常。
parallel.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
print('RANK %s'%comm.rank)
coder.py
import os, sys
syspath = os.path.dirname(os.path.realpath(__file__))
print('Running code')
com = 'mpirun -v -np 3 ' + str(sys.executable) + " -m mpi4py " + syspath + "/parallel.py"
os.system(com)
print('Done')
拨打python coder.py后:
预期
Running code
RANK 1
RANK 0
RANK 2
Done
观察到
Running code
Done
拨打python parallel.py后:
RANK 1
RANK 0
RANK 2
我猜想通过在python 之后调用os.system,进程已经被“阻塞”了,而os.system 因为这个“阻塞”而无法调用mpirun。
如果是这样,有没有办法绕过这个选项?
【问题讨论】:
-
如果使用
mpirun的绝对路径呢? -
我猜你的意思是“在调用 python coder.py 之后”而不是“parallel.py”
-
用绝对路径调用也不行。但是,如果我只运行
os.system(mpirun --version)它会给我版本,所以我不认为问题出在这一边。 -
您可以在致电
os.system()之前尝试打印com。由于你的程序显示Done,这意味着os.system(com)被执行并返回。 -
打印
com什么都不做。程序显示Done当然是因为它执行了,但是执行什么也没返回,这就是我要在这里解决的问题。
标签: python-3.x parallel-processing mpi mpi4py