2

私の python スクリプトは、コマンド ライン経由でネットワーク スループット テスト (Iperf などの ixChariot) を開始するバッチ ファイルを呼び出します。

スループットをテストするためにこの RF テストの減衰を増やすと、ixChariot は永遠にかかり始め、最初のテスト期間パラメーターに応答しません。したがって、スクリプト全体の速度を落として停止します (または、スクリプトを永遠に存続させると言うべきです)。

Python スクリプトが Popen からハングしないように、時間 T が経過した後に ixChariot プロセスを終了し、テストを終了するにはどうすればよいですか?

みんなありがとう、これは私にとって難しいです

4

1 に答える 1

1

プロセスにアラームを設定することができます

from signal import alarm, signal, SIGALRM, SIGKILL

TIMEOUT=-9

def run_proc_timeout(proc, timeout):

    class _Alarm(Exception):
        pass

    def alarm_handler(signum, frame):
        raise _Alarm

    # setup alarm for timeout length
    signal(SIGALRM, alarm_handler)
    alarm(timeout)

    try:
        stdout, stderr = proc.communicate()
        alarm(0)
    except _Alarm:
        pids = [proc.pid]
        # kill proc and all its children
        return TIMEOUT, "", ""

    return proc.returncode, stdout, stderr
于 2013-08-22T19:37:04.377 に答える