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