Я довольно плохо знаком с Python и не уверен, что является лучшим способом реализации многопоточного / многопроцессорного кода в распределенном кластере.
Я пытаюсь написать скрипт-обертку, используя Python, который вызываетвнешняя MPI-программа, работающая в большом кластере с использованием системы очередей PBS.(Очень) упрощенная версия типа сценария, над которым я работал, приведена ниже, где код перемещается в определенный каталог, запускает внешнюю программу MPI и проверяет результаты, чтобы увидеть, были ли какие-либо большие изменения.
#!/local/python-2.7.1/bin/python2.7
import os
import subprocess as sp
import coordinate_functions as coord_funcs
os.chdir('/usr/work/cmurray/SeachTest/')
print os.getcwd()
# Gets nodefile and num procs (NP)
cat_np = sp.Popen('cat $PBS_NODEFILE | wc -l', shell = True, stdout=sp.PIPE)
NP = int(cat_np.communicate()[0])
sp.call('cat $PBS_NODEFILE > nodefile', shell = True)
def run_mpi(np, nodefile):
mpi_cmd = 'mpirun -machinefile %s -np %d mpipg > calc.out' % (nodefile, np)
sp.call(vasp_cmd, shell = True)
def search_loop(calc_dir, t_total, nodefile, num_procs):
os.chdir(calc_dir)
no_events = True
while no_events or t < t_total:
run_mpi(mynodefile, NP)
num_events = coord_funcs.change_test('OUTFILE', 'INFILE', 0.01)
if num_events > 0:
event = True
else:
t += 1
search_loop('/usr/work/cmurray/SeachTest/calc_1/', 10, mynodefile, NP)
Затем он отправляется в очередь, используя:
qsub -l nodes=4 -N SeachTest ./SearchTest
Я хочу параллельно запустить несколько версий функции search_loop
в разных каталогах (содержащих разные начальные позиции).например) читать из списка.Процессы очень трудоемкие, вычисления MPI занимают, может быть, несколько минут, чтобы запускаться каждый раз, когда они вызываются.
Подойдет ли модуль threading
для этой цели или лучше подойдет модуль multiprocessing
?Возможно, мне понадобится передать простые сообщения, такие как логическое значение event
в приведенном выше примере, между потоками / процессами.
Кроме того, как мне убедиться, что скрипт python не использует процессоры, которые я назначилMPI работает?