def prioritized_queue(target, item)
      raise NameError.new('The target :internal_prio is a restricted target') if target == :internal_prio
      @lock.synchronize do
        @target_queues[target] = [] unless @target_queues[target]
        if(@whocares && @whocares.call(target))
          @target_queues[target] << item
          add_queue(:WHOCARES, @target_queues[target])
        else
          @target_queues[target] << item
          if(@target_queues[target].size < 2)
            add_queue(:NEW, @target_queues[target])
          else
            add_queue(:NORMAL, @target_queues[target])
          end
        end
        @lock.signal
      end
      item
    end
def prioritized_queue(target, item)
      raise NameError.new('The target :internal_prio is a restricted target') if target == :internal_prio
      @lock.synchronize do
        @target_queues[target] = [] unless @target_queues[target]
        if(@whocares && @whocares.call(target))
          @target_queues[target] << item
          add_queue(:WHOCARES, @target_queues[target])
        else
          @target_queues[target] << item
          if(@target_queues[target].size < 2)
            add_queue(:NEW, @target_queues[target])
          else
            add_queue(:NORMAL, @target_queues[target])
          end
        end
        @lock.signal
      end
      item
    end
args:: config arguments
   :raise_on_empty
 whocares:: lambda{|target| true||false}
 Create a priority queue
 target:: target queue
 item:: item to queue
 This prioritizes output to help reduce lag when lots of output
 is being sent to another target. This will automatically decide
 how to queue the item based on the target