3

多くのことを行うタスクがありますが、外部 API を呼び出すため、これらのいくつかは「ブロック」できます。

私の質問: RailsThread がメソッドに「留まる」時間を判断することは可能ですか? 時間がかかりすぎると中断するかリロードします。問題は、エラーが発生していないため、レスキューのようなことはできません。

私がやりたい疑似コード:

def aMethod
  #doSomethingThatCanBlock
  if takeMoreThan1000ms
    #reloadMethod or break
  end
end
4

1 に答える 1

8
require 'timeout'

def a_method(iterations)
  Timeout::timeout(1) do # 1 second
    iterations.times { |i| print("#{i} "); sleep(0.1) }
  end
rescue Timeout::Error
  print("TIMEOUT")
ensure
  puts
end

そして例:

irb(main):012:0> a_method(3)
0 1 2 
=> 3
irb(main):013:0> a_method(30)
0 1 2 3 4 5 6 7 8 9 TIMEOUT
=> nil
于 2012-12-20T15:30:32.870 に答える