0

次のように、コントローラーから casperJS スクリプトを起動しています。

output = `casperjs #{path_to_file} '#{url}#'`

また、場合によっては、いくつかの理由で casperjs スクリプトがハングしたり、時間がかかることがあります。とにかくプロセスを強制終了して制御するために、コントローラーにタイムアウトを設定できるかどうか疑問に思っています。それは可能ですか?

4

1 に答える 1

1
require 'timeout'
Timeout.timeout(<seconds>) do
   output = `casperjs #{path_to_file} '#{url}#'`
end

スクリプトが指定された時間内に終了しない場合、これにより Timeout::Error 例外が発生します

編集(タイムアウト後にプロセスを強制終了するため)

require 'timeout'
pipe_cmd_in, pipe_cmd_out = IO.pipe
pid = Process.spawn("casperjs #{path_to_file} '#{url}#'", :out => pipe_cmd_out, :err => pipe_cmd_out)
Timeout.timeout(<seconds>) do
   Process.wait(pid)
   pipe_cmd_out.close
   output = pipe_cmd_in.read;
end
rescue Timeout::Error
   Process.kill('TERM', pid)
end

テミネーターの宝石も見てください。処理するシステムコールが多い場合に役立ちます

于 2013-10-23T20:13:33.870 に答える