2013-05-09 18 views
8

Bir ruby ​​kodunda bir zaman sınırı belirlemenin bir yolunu bulmak istiyorum, böylece o zaman sınırından sonra çıkacak.Çalıştırılacak bir Ruby kodunun zaman sınırı nasıl ayarlanacağı

+1

Neden 'Time.new' yapma, yapma X'in ardından kontrol döngüleri görmek için sen Başlangıç? Ya da çalışmak için uzun süren fonksiyon üzerinde kontrolünüz yok mu? Eğer öyleyse, olasılıklarınız 1) asenkronize olarak adlandırın, bu yüzden kodunuz hala kontrole sahip ve bir süre sonra pes edebilir 2) çok uzun sürerse ilk sonlandırmak için ikinci bir işlem yazınız – Patashu

cevap

15

Neden bu sorunun neden reddedildiğini bilmiyorum, timeout modülüyle yapmak çok basit.

Bu, bir blok ve bir zaman aralığı geçirmenizi sağlar. Blok, zaman dilimi içinde tamamlarsa, değer döndürülür. Aksi halde bir istisna atılır. Örnek kullanım:

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 

Kullanımda: yeni zaman zaman sonra zaman sınırından daha fazla ise

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! Cevap. Kısa ama noktaya. Ama bir soru, 'require' yerine 'load' neden? Bir betik test edilirken –

+1

yükü daha iyidir, gerektiğinde bunu değiştirdikten sonra yeniden yüklemeyecektir (aynı komut dosyasının birden fazla kez gerek duyulmasını gerektirmediğinden izlenmesi gerekir). –

+0

'load' ile' require' arasındaki farkı kontrol etmek için iyi bir kaynak var mı? Bana bakar mısın? –

İlgili konular