Home

mrflip edited this page Sep 12, 2010 · 11 revisions
Clone this wiki locally

Check out

Basic usage

  class Broker
    require 'memcached'
    QUEUE_SLEEP_TIME  = 200
    MEMCACHED_TIMEOUT = 0.250
    def queue
      @queue ||= Memcached.new(['localhost:22133'], :timeout => MEMCACHED_TIMEOUT)
    end

    def process_tasks &block
      loop do
        task = start_task or next
        yield task
        complete_task
      end
    end
    
    # Retrieve a task. Returns nil on error or timeout
    def start_task
      begin
        task = queue.get("#{task}/open/t=#{QUEUE_SLEEP_TIME}") 
      rescue RuntimeError => e; warn e ; return ; end
    end

    def complete_task
       queue.get("#{task}/close") rescue nil
    end

  end