Python で次の操作を行う必要があります。プロセス (サブプロセス モジュール?) を生成し、次の操作を実行します。
- プロセスが正常に終了した場合、終了した瞬間から正確に継続します。
- そうでない場合、プロセスが「スタック」し、(たとえば) 1 時間以内に終了しない場合は、それを強制終了して続行します (ループ内でもう一度試行する可能性があります)。
これを実現する最もエレガントな方法は何でしょうか?
ベストアンサー1
モジュールsubprocess
はあなたの味方です。プロセスを開始してオブジェクトを取得しPopen
、それを次のように関数に渡します。これはタイムアウト時にのみ例外を発生させることに注意してください。必要に応じて、例外をキャッチしてkill()
プロセスでメソッドを呼び出すことができますPopen
。(ちなみに、kill は Python 2.6 の新機能です)
import time
def wait_timeout(proc, seconds):
"""Wait for a process to finish, or raise exception after timeout"""
start = time.time()
end = start + seconds
interval = min(seconds / 1000.0, .25)
while True:
result = proc.poll()
if result is not None:
return result
if time.time() >= end:
raise RuntimeError("Process timed out")
time.sleep(interval)