Sha256: b8092fab1445e6d11f71e26c665a3c52e8726ffe020a337105eaf81bf1c7b493
Contents?: true
Size: 803 Bytes
Versions: 3
Compression:
Stored size: 803 Bytes
Contents
require 'thread' require 'timeout' module EasyBunnyRPC class TimedQueue def initialize @array = Array.new @mutex = Mutex.new @cv = ConditionVariable.new end def push(item) @mutex.synchronize do @array.push(item) @cv.signal end end def pop_with_timeout(timeout=0.5) timeout_at = Time.now + timeout @mutex.synchronize do loop do if @array.empty? remaining = timeout_at - Time.now raise(Timeout::Error, "Waited #{timeout} seconds to pop") if(remaining <= 0) # unlocks mutex, waits for remaining seconds, locks mutex on wake-up @cv.wait(@mutex, remaining) else return @array.pop end end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
easy_bunny_rpc-0.1.3 | lib/easy_bunny_rpc/timed_queue.rb |
easy_bunny_rpc-0.1.2 | lib/easy_bunny_rpc/timed_queue.rb |
easy_bunny_rpc-0.1.1 | lib/easy_bunny_rpc/timed_queue.rb |