2016-12-30 2 views
0

Я пытаюсь выполнить несколько сценариев python, которые обучают глубокие нейронные сети, используя Keras, и я сталкиваюсь с проблемой, когда при завершении первого скрипта python вся партия прекращается.Долгосрочный пакетный процесс заканчивается преждевременно в Ubuntu

Я пробовал писать оболочку python, но все равно ничего не меняется. Интересно, связана ли эта проблема с ОС или она связана с каркасом Keras или python.

Первая попытка была написать скрипт:

#!/bin/sh 
for i in {1..10}; do python my_experiment.py; done 

Однако после запуска my_experiment.py один раз, вся партия останавливается.

Я попытался с помощью Python:

import subprocess 
import os 

def main(): 
    for i in xrange(10): 
     subprocess.call(['python', os.path.join(os.getcwd(), 'my_experiment.py')]) 

if __name__ == "__main__": 
    main() 

Но я все еще получаю тот же результат.

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

Кроме того, я бегу этот процесс на удаленном компьютере через SSH, следующим образом:

$ ./batch_script.sh & 
$ disown 

Или в случае питона:

$ python batch_script.py & 
$ disown 

Приветствия

ответ

1

Это может произойти, если в некоторых процессах все еще есть стандартный ввод или вывод, связанный с tty, или если некоторые подпроцессы не отменены должным образом.

Возможным обходным решением является использование терминального мультиплексора, такого как screen или tmux, для решения проблемы оставления фонового процесса после выхода из системы SSH. Это намного проще в использовании, чем отключение/отсутствие процесса.

Обычно вы запускаете screen или tmux, и вы получите новую сессию терминала. Вы сможете «отсоединиться» от этой сессии и оставить ее работоспособной. После того, как вы выйдете из системы и снова войдете в систему, вы сможете «повторно подключиться» к работающим сеансам и просмотреть выходные данные процесса, как если бы вы никогда не выходили из системы.

+0

Для уточнения, первый запуск скрипта python выполняется до конца и успешно завершается. В тот момент, когда следующий пакетный экземпляр не запускается. Вы поднимаете хорошую точку, которая является выходом на tty. Я изучу это. – pabloxrl

+1

Может быть, второй процесс хочет что-то написать в stdout? Попробуйте перенаправить явно stdout/stderr при запуске вашей партии? '$ ./batch_script.sh &> output.log &' – damienfrancois

+0

Это именно то, что я сделал :) Я обновлю свои выводы, спасибо – pabloxrl

Смежные вопросы