Я запускаю скрипт Perl через модуль подпроцесса в Python на Linux. Функция, которая запускает скрипт, вызывается несколько раз с переменным входом.Почему я должен использовать .wait() с модулем подпроцесса python?
def script_runner(variable_input):
out_file = open('out_' + variable_input, 'wt')
error_file = open('error_' + variable_input, 'wt')
process = subprocess.Popen(['perl', 'script', 'options'], shell=False,
stdout=out_file, stderr=error_file)
Однако, если я запустил эту функцию, скажем, дважды, выполнение первого процесса прекратится, когда начнется второй процесс. Я могу получить желаемое поведение, добавив
process.wait()
после вызова сценария, поэтому я не застрял. Тем не менее, я хочу узнать, почему я не могу запускать скрипт с помощью подпроцесса столько раз, сколько хочу, и чтобы скрипт выполнял эти вычисления параллельно, не дожидаясь завершения его между каждым прогоном.
UPDATE
Преступник не был настолько захватывающим: сценарий Perl используется общий файл, который был переписан для каждого исполнения.
Однако урок, который я узнал из этого, состоял в том, что сборщик мусора не удаляет этот процесс после его запуска, поскольку это не повлияло на мой сценарий, как только я его разобрал.
вы уверены, что второй завершает? Вы имеете в виду один и тот же * вызов дважды (тот же 'variable_input')? – knitti
Второй заканчивается, как и ожидалось. Я имею в виду разные переменные. Например, «test_1» и «test_2». – Viktiglemma
Что касается попытки сохранить ссылку на оба процесса, например. возвращает процесс и сохраняет его в переменной? – knitti