Concurrency Basics
Timeout Guard
A timeout guard turns a slow operation into a handled failure.
Timeout Guard
timeout_guard.rb
require "timeout"
limit =
work_time = 0.02
status = "pending"
begin
Timeout.timeout(limit) do
sleep(work_time)
status = "finished"
end
rescue Timeout::Error
status = "timed_out"
end
puts "limit=#{format('%.2f', limit)}"
puts "work_time=#{format('%.2f', work_time)}"
puts "status=#{status}"
require "timeout"
limit =
work_time = 0.02
status = "pending"
begin
Timeout.timeout(limit) do
sleep(work_time)
status = "finished"
end
rescue Timeout::Error
status = "timed_out"
end
puts "limit=#{format('%.2f', limit)}"
puts "work_time=#{format('%.2f', work_time)}"
puts "status=#{status}"
require "timeout"
limit =
work_time = 0.02
status = "pending"
begin
Timeout.timeout(limit) do
sleep(work_time)
status = "finished"
end
rescue Timeout::Error
status = "timed_out"
end
puts "limit=#{format('%.2f', limit)}"
puts "work_time=#{format('%.2f', work_time)}"
puts "status=#{status}"
timeout guard
`Timeout.timeout` raises when a block runs too long, so code can recover instead of waiting forever.