У меня возникла проблема с вызовом внешней программы из моего сценария python, в которой я хочу использовать mpi4py для распределения рабочей нагрузки между различными процессорами.Вызов подпроцесса в скрипте с использованием mpi4py
В принципе, я хочу использовать свой скрипт таким образом, чтобы каждый ядро готовил некоторые входные файлы для вычислений в отдельных папках, затем запускал внешнюю программу в этой папке, ожидал выход, а затем, наконец, читал результаты и собирал их.
Однако я просто не могу заставить внешний вызов программы работать. В поисках решения этой проблемы я обнаружил, что проблемы, с которыми я сталкиваюсь, кажутся весьма фундаментальными. Следующий простой пример проясняет это:
#!/usr/bin/env python
import subprocess
subprocess.call(“EXTERNAL_PROGRAM”, shell=True)
subprocess.call(“echo test”, shell=True)
./script.py
работает отлично (оба вызова работает), в то время как mpirun -np 1 ./script.py
выводит только test
. Существует ли какое-либо обходное решение для этой ситуации? Программа, безусловно, находится в моем PATH, но она также терпит неудачу, если я использую отмененный путь для вызова.
This SO question seems to be related, sadly there are no answers...
EDIT:
В оригинальной версии моего вопроса я не включал какой-либо код, используя mpi4py, даже если я упоминаю этот модуль в названии. Так вот более сложный пример кода:
К сожалению, я не могу предоставить более подробную информацию о внешней исполняемой EXTERNAL_PROGRAM другой, чем это приложение C++, который включен MPI. Как написано в разделе комментариев ниже, я подозреваю, что это причина (или один из резонансов), почему мой внешний вызов программы в основном игнорируется.
Обратите внимание, что я знаю, что в этой ситуации никто не может воспроизвести мою точную ситуацию. Тем не менее, я надеялся, что кто-то здесь уже столкнулся с подобными проблемами и может помочь.
Для полноты ОС ОС Ubuntu 14.04, и я использую OpenMPI 1.6.5.
Почему вы используете 'mpirun' для запуска сценария python с поддержкой mpi? – jfs
В моем минимальном рабочем примере я мог бы переусердствовать. Однако данный пример по-прежнему иллюстрирует основную проблему моей проблемы: я не могу вызвать определенную внешнюю программу из скрипта python, который запускается в среде MPI. Я еще не упомянул, что эта внешняя программа сама по себе поддерживает MPI, поэтому это может объяснить различное поведение, которое я испытываю при вышеупомянутых вызовах подпроцесса. – nilfisque
пример кода не является полным, см. [Как создать минимальный полный пример кода] (http://stackoverflow.com/help/mcve). Как я могу (или кто-либо другой) воспроизвести вашу проблему? (укажите конкретные шаги) Я не вижу, где используется 'mpi4py'. Какова ваша среда (ОС, какая реализация mpi, версии и т. Д.)? – jfs