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
Antwort
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
Nice! Antworten. Kurz, aber auf den Punkt. Aber eine Frage ist, warum "laden" statt "erfordern"? –
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). –
Eine gute Quelle, um den Unterschied zwischen 'load' und' require' zu überprüfen? Würden Sie mich verweisen? –
- 1. So legen Sie ein dynamisches Attribut fest
- 2. So legen Sie ein anderes Thema für ein Layout fest
- 3. So legen Sie ein Überziehungslimit fest
- 4. So legen Sie ein internes Basisklassenfeld fest
- 5. So legen Sie Header für DeleteAsync fest
- 6. So legen Sie die Zielwebsite für die MSDeploy.exe-Befehlszeile fest
- 7. So legen Sie die Standardschaltfläche für die EINGABETASTE fest
- 8. So legen Sie ein Ziel für GVRHead fest GoogleVR
- 9. So legen Sie ein Kennwort für einen Andock-Container fest
- 10. So legen Sie das Layout für die benutzerdefinierte Navigationsleiste fest
- 11. So legen Sie die Abfragegrenze für GTLQuery fest?
- 12. So legen Sie die Auflösung für Babel-Loader-Presets fest
- 13. So legen Sie env Einträge für die Bereitstellung fest
- 14. So legen Sie die Sichtbarkeit für eine Aktionsleistenmenügruppe fest?
- 15. So legen Sie die Schriftgröße für Text von Dialogfeldern fest
- 16. So legen Sie die Stückliste für eine gelesene Datei fest
- 17. So legen Sie die Eindeutigkeit für ein Tupel eines Feldes in einem Django-Modell fest
- 18. So legen Sie Fehlermeldungen für die externe Formularüberprüfung fest, CodeIgniter
- 19. So legen Sie den Attributtitel für die automatische Vervollständigung fest
- 20. So legen Sie Berechtigungen für die URL fest?
- 21. So legen Sie die Umgebungsvariable für gulp-jasmine fest
- 22. So legen Sie die Standardansicht für 'p4 client' fest
- 23. Legen Sie die Platzhalterzeichenfolge für NSTextView fest
- 24. So legen Sie ein Steuerelement auf einen transparenten Hintergrund fest
- 25. So legen Sie Umgebungsvariablen mit Fabric fest
- 26. So legen Sie Standarddokument in ASP.Net fest
- 27. So legen Sie das ausgewählte Objektgitter fest
- 28. Wie legen Sie die Schriftgröße für ein UIBarButtonItem fest?
- 29. So legen Sie Text in der Textansicht eines Widgets fest
- 30. So legen Sie x-Grenzwerte für varImpPlot fest
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