【问题标题】:Long-running batch process being terminated prematurely in Ubuntu长时间运行的批处理在 Ubuntu 中过早终止
【发布时间】:2016-12-30 10:17:42
【问题描述】:

我正在尝试批处理一些使用 Keras 训练深度神经网络的 python 脚本,但遇到的问题是,当第一个 python 脚本完成时,整个批处理都停止了。

我尝试编写一个 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

干杯

【问题讨论】:

    标签: python shell ubuntu keras


    【解决方案1】:

    如果某些进程仍然有链接到 tty 的标准输入或输出,或者如果某些子进程没有被正确地拒绝,则可能会发生这种情况。

    一种可能的解决方法是使用终端多路复用器(例如screentmux)来解决在 SSH 注销后让后台进程运行的问题。它比放弃/禁止进程更容易使用。

    通常你会运行screentmux,你会得到一个新的终端会话。您将能够从该会话中“分离”并使其继续运行。注销并再次登录后,您将能够“重新附加”到正在运行的会话并查看进程的输出,就像您从未注销一样。

    【讨论】:

    • 只是为了澄清,python脚本的第一次运行一直运行到最后并成功完成。在下一个批处理实例没有启动的那一刻。您提出了一个很好的观点,即 tty 的输出。我会探索的。
    • 也许第二个进程想写一些东西到标准输出?开始批处理时尝试显式重定向 stdout/stderr? $ ./batch_script.sh &> output.log &
    • 这正是我所做的 :) 我会更新我的发现,谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多