2016-12-30 102 views
0

我想批量使用Keras訓練深層神經網絡的一些python腳本,我遇到了第一個python腳本完成時整個批處理停止的問題。在Ubuntu中過早終止長時間運行的批處理過程

我試過寫一個python包裝器,但仍然沒有改變。我不知道這個問題是否與操作系統相關,或者它與Keras框架或python有關。

的第一次嘗試是寫一個shell腳本:

#!/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的情況下:

$ python batch_script.py & 
$ disown 

乾杯

回答

1

如果某些進程仍然具有標準輸入或輸出鏈接到tty,或者某些子進程沒有正確地被拒絕,則可能會發生這種情況。

可能的解決方法是使用終端多路複用器(如screentmux)來解決在SSH登出後留下後臺進程的問題。使用比關閉/禁止一個進程要容易得多。

通常,您將運行screentmux,您將獲得一個新的終端會話。您將能夠從該會話中「分離」並保持運行。在您註銷並重新登錄後,您將能夠'重新連接'到正在運行的會話並查看過程的輸出,就好像您從未註銷過一樣。

+0

只是爲了說明,python腳本的第一次運行一直運行到結束併成功完成。在那個時候下一個批處理實例沒有啓動。 你提出了一個很好的觀點,即輸出到tty。我將探討這一點。 – pabloxrl

+1

也許第二個進程想寫一些東西給標準輸出?嘗試在開始批處理時明確重定向stdout/stderr? '$ ./batch_script.sh&> output.log&' – damienfrancois

+0

這就是我所做的:)我會更新我的發現,謝謝 – pabloxrl

相關問題