2012-12-20 1 views
2

많은 작업을 수행하고 있는데, 일부는 외부 API를 호출하기 때문에 "차단"할 수 있습니다.레일스 메서드 실행 시간 제한 - 메서드에서 스레드가 "유지"되는 길이를 결정합니다.

내 질문 : RailsThread가 메소드에 얼마나 오래 머무는 지 확인할 수 있습니까? 너무 오래 걸리면 재부팅하거나 재부팅합니다. 문제는 아무런 오류가 없다는 것입니다. 그래서 구조와 같은 것을 할 수 없습니다.

내가하고 싶은 의사 코드 :

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

답변

7
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 
+0

감사합니다! – damoiser