Pas*_*sta 10 ruby timeout ruby-on-rails rescue
我有这段代码:
begin
complete_results = Timeout.timeout(4) do
results = platform.search(artist, album_name)
end
rescue Timeout::Error
puts 'Print me something please'
end
Run Code Online (Sandbox Code Playgroud)
然后我启动包含此代码的方法,以及这里是堆栈跟踪的开始:
Exception message : execution expired Exception backtrace : /***/****/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/timeout.rb:64:i
所以我天真地认为我的通话时间已经过去了.但是,"打印我喜欢的东西"永远不会被打印出来,并且complete_results假设是超时状态返回值(无论是真还是假,如文档中所提到的),最终都不是布尔值.
难道我做错了什么?
Dav*_*ulc 20
你的代码是正确的
require 'timeout'
begin
complete_results = Timeout.timeout(1) do
sleep(2)
end
rescue Timeout::Error
puts 'Print me something please'
end
Run Code Online (Sandbox Code Playgroud)
打印出来"请打印我的东西".
尝试上面的基本代码.如果这样可行,那你就有问题了platform.search.
问题是platform.search正在捕获Timeout#timeout throws.
您可以通过将内部代码包装在另一个线程 - YMMV 中来解决此问题。
begin
complete_results = Timeout.timeout(4) do
Thread.new{ results = platform.search(artist, album_name) }.value
end
rescue Timeout::Error
puts 'Print me something please'
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17147 次 |
| 最近记录: |