2009-04-09 3 views

Antwort

4

timeout.rb hat einige Probleme, wo es im Grunde nicht immer ganz richtig funktioniert, und ich würde nicht empfehlen, es zu verwenden. Überprüfen System Timer oder Terminator stattdessen

Die System-Timer-Seite insbesondere beschreibt, warum timeout.rb kann fehlschlagen, komplett mit schönen Bildern und alles. Unterm Strich ist:

  • Für timeout.rb zu arbeiten, ein frisch erstellten „mörderischer“ Ruby-Thread hat durch die Ruby-Interpreter eingeplant werden.
  • M.R.I. 1.8, der von den meisten Ruby-Anwendungen in der Produktion verwendete Interpreter, implementiert Ruby-Threads als grüne Threads.
  • Es ist eine bekannte Einschränkung der grünen Threads (die auf einem einzelnen nativen Thread ausgeführt werden), dass, wenn ein grüner Thread einen blockierenden Systemaufruf für die zugrunde liegenden Betriebssysteme ausführt, keiner der grünen Threads in der virtuellen Maschine ausgeführt wird bis der Systemaufruf zurückkehrt.
0

Um einen hässlichen Fehler bei Timeout vermeide ich es empfehlen, umschließende und eine Rettung wie folgt aus:

begin 
    status = Timeout::timeout(5) do 
     #Some stuff that should be interrupted if it takes too long 
    end  
rescue Timeout::Error 
    puts "Error message: It took too long!\n" 
end 
Verwandte Themen