Запуск аналогичной программы в нескольких ядрах с разными переменными - PullRequest
3 голосов
/ 19 мая 2019

У меня есть программа, для которой я хочу создать N экземпляров, где меняется только один гиперпараметр $ \ beta $.

По-моему, я знаю, что мог бы сделать это с помощью bash-скрипта, где я вызываю программу N раз, каждый с разным значением для $ \ beta $, и отправляю каждый в фоновый режим, чтобы можно было запустить следующий :

#!/bin/bash

nohup python3 test.py 1 >> res.txt &
nohup python3 test.py 2 >> res.txt &
nohup python3 test.py 3 >> res.txt &
nohup python3 test.py 4 >> res.txt &

Может быть, я тоже могу сделать это прямо в Python, более чистым способом. Мой вопрос, исходя из вашего опыта, каков самый чистый способ достижения этого? Не стесняйтесь спрашивать любую деталь, которую я мог пропустить.

Ответы [ 2 ]

2 голосов
/ 19 мая 2019

Для параллельного запуска нескольких вещей мне приходит в голову: GNU Parallel .

Итак, для вашего примера, пробный прогон дает следующее:

parallel --dry-run 'nohup python prog.py {} &' ::: {1..4}

Пример вывода

nohup python prog.py 3 &
nohup python prog.py 2 &
nohup python prog.py 1 &
nohup python prog.py 4 &

Как правило, вам не нужно, чтобы несколько параллельных процессов записывали в один и тот же файл - это создает беспорядок, поэтому я бы назвал выходной файл после параметра:

parallel --dry-run 'nohup python prog.py {}  > res{}.txt &' ::: {1..4}
1 голос
/ 19 мая 2019

Вы ищете модуль подпроцесс .

subprocess.run([process_name, arg1, arg2, argn])

Пример.

import subprocess

subprocess.run(["ls", "-l"])

Также проверьте , как вызвать подпроцесс и получить вывод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...