Моя цель - создать скрипт python для запуска другого скрипта python для разных процессов, то есть я хочу разложить скрипт поверх n процессов. Чтобы попытаться добиться этого, я пытаюсь запустить пример икру mpi4py, указанный в документации (см. http://mpi4py.scipy.org/docs/usrman/tutorial.html). Но этот пример терпит неудачу с сообщением:mpi4py spwn связь между процессами не работает в Windows 7
По меньшей мере одна пара процессов MPI не может достигать друг друга для MPI-связи. Это означает, что ... Эта ошибка иногда может быть результатом забывания указать «сам» BTL. ... Ваша работа MPI теперь собирается прервать.
моя установка находится на машине с Windows 7 с openMPI 1.6.1 и последней установкой mpi4py.
Код, в моем случае: master.py:
#!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys
comm = MPI.COMM_SELF.Spawn(sys.executable,
args=['worker.py'],
maxprocs=5)
N = numpy.array(100, 'i')
comm.Bcast([N, MPI.INT], root=MPI.ROOT)
PI = numpy.array(0.0, 'd')
comm.Reduce(None, [PI, MPI.DOUBLE],
op=MPI.SUM, root=MPI.ROOT)
print(PI)
comm.Disconnect()
worker.py:
#!/usr/bin/env python
from mpi4py import MPI
import numpy
comm = MPI.Comm.Get_parent()
size = comm.Get_size()
rank = comm.Get_rank()
N = numpy.array(0, dtype='i')
comm.Bcast([N, MPI.INT], root=0)
h = 1.0/N; s = 0.0
for i in range(rank, N, size):
x = h * (i + 0.5)
s += 4.0/(1.0 + x**2)
PI = numpy.array(s * h, dtype='d')
comm.Reduce([PI, MPI.DOUBLE], None,
op=MPI.SUM, root=0)
comm.Disconnect()
линия производит ошибку является:
comm = MPI.COMM_SELF.Spawn(sys.executable,
args=['worker.py'],
maxprocs=5)
команда для запуска скрипта находится в командной строке:
mpirun -n 1 python.exe master.py
Спасибо, но не могли бы вы быть более чувствительны к тому, как это сделать. Я думал, что поставить аргумент: 'args = ['worker.py']' будет именно тем, что вы упоминаете? – Yvus
Мне также интересно об этом – kilojoules
Итак, вы меня опустили, потому что вы не понимаете моего ответа? Аргумент args - это аргументы командной строки, которые вы передаете исполняемому файлу, который вы запускаете. И исполняемый файл, который вы запускаете, по-прежнему «sys.executable». Таким образом, вы выдаете команду: master.py worker.py См.? Вы вызываете главную программу с именем рабочего в качестве аргумента. –