【问题标题】:Timeout::Error exception in a loop循环中的 Timeout::Error 异常
【发布时间】:2014-06-22 15:39:41
【问题描述】:

我在循环中有这段 ruby​​ 代码:

pid = Process.spawn("my_process_command")
begin
    Timeout.timeout(16) do
        `my_timeout_command`
        Process.wait(pid)
    end
rescue
    system("clear")
    puts 'Process not finished in time, killing it'
    Process.kill('TERM', pid)
end

问题是一旦 Timeout::Error 异常被捕获,块将被跳过并且循环实际上什么都不做。我该如何解决这个问题?

【问题讨论】:

    标签: ruby exception timeout


    【解决方案1】:

    你需要rescue专门针对Timeout:Error,因为Timeout::Error is not a standard error

    pid = Process.spawn("my_process_command")
    begin
        Timeout.timeout(16) do
            `my_timeout_command`
            Process.wait(pid)
        end
    rescue Timeout::Error
        system("clear")
        puts 'Process not finished in time, killing it'
        Process.kill('TERM', pid)
    end
    

    【讨论】:

    • 但是 [this](ruby-doc.org/stdlib-2.1.1/libdoc/timeout/rdoc/…" 不说 Timeout::Error 是默认值吗? timeout(sec, klass = nil) 在一个块中执行一个操作,如果需要,会引发错误超过 sec 秒才能完成。如果块未能在 sec 秒内终止,则引发 klass 异常类。省略将使用默认值 Timeout::Error。
    • @user3606584 是的,这意味着你可以调用Timeout.timeout(16, ProcessNotFinishedException) 并且ProcessNotFinishedException 将被提升而不是Timeout::Error
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多