我有一个偶尔挂在网络连接上的库方法,并且没有超时机制。
添加自己的最简单方法是什么?基本上,我试图让我的代码无限期地被卡住。
答案 0 :(得分:4)
回答了我自己的问题:
http://www.ruby-doc.org/stdlib/libdoc/timeout/rdoc/index.html
要求'超时' status = Timeout :: timeout(5){ #如果花费太多时间应该中断的东西...... }
答案 1 :(得分:4)
timeout.rb有一些问题,基本上它并不总是正常工作,我不建议使用它。请检查System Timer或Terminator
系统计时器页面特别描述了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