os.system () вызовы mpirun не работают после вызова скрипта с python - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь запустить mpirun для кода на python, который уже был запущен через консоль, блокнот jupyter или из консоли Pycharm.Весь код выполняется нормально до вызова процесса 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

Я думаю, что, позвонив os.system после python процесс уже "заблокирован" и os.system не может вызвать mpirun из-за этой "блокировки".

Если это так, есть ли способ обойти эту опцию?

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Я продолжил тему здесь .После некоторых рекомендаций мы поняли, что mpi4py был скомпилирован для предыдущей версии mpi.

Я удалил все (любую возможную версию mpirun на компьютере) и, на всякий случай, переустановил мои пакеты conda в чистой среде.Теперь все отлично работает.

0 голосов
/ 26 июня 2019

В моей среде (Python 2.7, MPI4Py 3.0.1 и MPICH 3.2.1) следующий код работает так, как вы ожидаете:

import os
import sys
syspath = os.path.dirname(os.path.realpath(__file__))

print('Running code')
com = 'mpirun -np 3 ' + str(sys.executable) + " " + syspath + "/parallel.py"
print(com)
os.system(com)
print('Done')

Похоже, вам не нужно указывать модуль mpi4py в командной строке, так как вы импортируете его в файл parallel.py. Кроме того, я удалил опцию -v, которая добавляет много деталей.

...