在ruby中,我如何尝试一段代码但在n秒后继续?

时间:2009-04-09 01:31:01

标签: ruby

我有一个偶尔挂在网络连接上的库方法,并且没有超时机制。

添加自己的最简单方法是什么?基本上,我试图让我的代码无限期地被卡住。

3 个答案:

答案 0 :(得分:4)

回答了我自己的问题:

http://www.ruby-doc.org/stdlib/libdoc/timeout/rdoc/index.html

要求'超时'   status = Timeout :: timeout(5){     #如果花费太多时间应该中断的东西......   }

答案 1 :(得分:4)

timeout.rb有一些问题,基本上它并不总是正常工作,我不建议使用它。请检查System TimerTerminator

系统计时器页面特别描述了timeout.rb失败的原因,以及漂亮的图片和所有内容。底线是:

  
      
  • 要使timeout.rb正常工作,必须由Ruby解释器安排一个新创建的“杀人”Ruby线程。
  •   
  • M.R.I。 1.8,大多数Ruby应用程序在生产中使用的解释器,将Ruby线程实现为绿色线程。
  •   
  • 绿色线程(在单个本机线程上运行)的一个众所周知的限制是,当绿色线程执行对底层操作系统的阻塞系统调用时,虚拟机中的绿色线程都不会运行直到系统调用返回。
  •   

答案 2 :(得分:0)

为了防止在超时时出现丑陋的错误,我建议将其封闭并使用这样的救援方式:

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