2013-05-09 5 views
8

Ich möchte eine Methode finden, um ein Zeitlimit für einen Ruby-Code festzulegen, damit es nach Ablauf dieses Zeitlimits beendet wird.So legen Sie ein Zeitlimit für die Ausführung eines Ruby-Codes fest

+1

Warum nicht 'Time.new', tut X-Schleifen, dann überprüfen, um zu sehen, ob die neue Zeit mehr als die Frist nach der Zeit ist, dass Sie fing an bei? Oder haben Sie keine Kontrolle über die Funktion, die viel Zeit benötigt? Wenn ja, sind Ihre Möglichkeiten 1) asynchron aufzurufen, so dass Ihr Code immer noch die Kontrolle hat und nach einer Weile einfach aufgeben kann 2) einen zweiten Prozess schreiben, um den ersten zu beenden, wenn es zu lange dauert – Patashu

Antwort

15

Ich bin nicht sicher, warum diese Frage wird downvoted, es ist sehr einfach mit dem timeout Modul zu tun.

Damit können Sie einen Block und einen Zeitraum übergeben. Wenn der Block innerhalb des Zeitraums abgeschlossen wird, wird der Wert zurückgegeben. Andernfalls wird eine Ausnahme ausgelöst. Beispiel für die Verwendung:

require 'timeout' 

def run 
    begin 
    result = Timeout::timeout(2) do 
     sleep(1 + rand(3)) 
     42 
    end 
    puts "The result was #{result}" 
    rescue Timeout::Error 
    puts "the calculation timed out" 
    end 
end 

Im Einsatz:

2.0.0p0 :005 > load 'test.rb' 
=> true 
2.0.0p0 :006 > run 
the calculation timed out 
=> nil 
2.0.0p0 :007 > run 
the calculation timed out 
=> nil 
2.0.0p0 :008 > run 
The result was 42 
=> nil 
+0

Nice! Antworten. Kurz, aber auf den Punkt. Aber eine Frage ist, warum "laden" statt "erfordern"? –

+1

Laden ist besser, wenn Sie ein Skript testen, da require das Request nicht erneut lädt, nachdem Sie es geändert haben (Sie benötigen Spuren, die Sie bereits benötigt haben, sodass das gleiche Skript nicht mehrmals benötigt wird). –

+0

Eine gute Quelle, um den Unterschied zwischen 'load' und' require' zu ​​überprüfen? Würden Sie mich verweisen? –

Verwandte Themen