使用Net :: HTTP时,rails定时器是否可靠?

时间:2010-03-11 20:07:41

标签: ruby-on-rails http multithreading timeout

当从一个可能很慢的网站读取数据时,我想确保get_response无法挂起,因此在x秒后添加了一个超时计时器。到现在为止还挺好。然后我读了http://ph7spot.com/musings/system-timer,这说明在某些情况下,由于ruby的线程实现,timer.rb不起作用。

有谁知道这是否是这些情况之一?

url = URI.parse(someurl)

begin
    Timeout::timeout(30) do 
        response = Net::HTTP.get_response(url)
        @responseValue = CGI.unescape(response.body)
    end 
rescue Exception => e 
    dosomething
end

1 个答案:

答案 0 :(得分:0)

好吧,首先,Timeout不是在Rails中定义的类,而是在Ruby中,其次,Timeout在进行系统调用时不可靠。

Ruby使用它所谓的绿色线程。假设你有3个线程,你认为它们都将并行运行,但是如果其中一个线程发出系统调用,则所有其余线程都将被阻塞,直到系统调用完成,在这种情况下,Timeout将无法按预期工作,所以使用像SystemTimer这样可靠的东西总是更好。