class MashapeAnalytics::Utils::QueueWithTimeout
Source: spin.atomicobject.com/2014/07/07/ruby-queue-pop-timeout/
Public Class Methods
new()
click to toggle source
# File lib/mashape-analytics/utils.rb, line 5 def initialize @mutex = Mutex.new @queue = [] @recieved = ConditionVariable.new end
Public Instance Methods
<<(x)
click to toggle source
# File lib/mashape-analytics/utils.rb, line 11 def <<(x) @mutex.synchronize do @queue << x @recieved.signal end end
pop(non_block = false)
click to toggle source
# File lib/mashape-analytics/utils.rb, line 18 def pop(non_block = false) pop_with_timeout(non_block ? 0 : nil) end
pop_with_timeout(timeout = nil)
click to toggle source
# File lib/mashape-analytics/utils.rb, line 22 def pop_with_timeout(timeout = nil) @mutex.synchronize do if @queue.empty? @recieved.wait(@mutex, timeout) if timeout != 0 #if we're still empty after the timeout, raise exception raise ThreadError, "queue empty" if @queue.empty? end @queue.shift end end