Parent

Typhoeus::Hydra

Public Class Methods

hydra() click to toggle source
# File lib/typhoeus/hydra.rb, line 27
def self.hydra
  @hydra ||= new
end
hydra=(val) click to toggle source
# File lib/typhoeus/hydra.rb, line 31
def self.hydra=(val)
  @hydra = val
end
new(options = {}) click to toggle source
# File lib/typhoeus/hydra.rb, line 11
def initialize(options = {})
  @memoize_requests = true
  @multi       = Multi.new
  @easy_pool   = []
  initial_pool_size = options[:initial_pool_size] || 10
  @max_concurrency = options[:max_concurrency] || 200
  initial_pool_size.times { @easy_pool << Easy.new }
  @memoized_requests = {}
  @retrieved_from_cache = {}
  @queued_requests = []
  @running_requests = 0

  self.stubs = []
  @active_stubs = []
end

Public Instance Methods

abort() click to toggle source

Abort the run on a best-effort basis.

It won't abort the current burst of @max_concurrency requests, however it won't fire the rest of the queued requests so the run will be aborted as soon as possible...

# File lib/typhoeus/hydra.rb, line 42
def abort
  @queued_requests.clear
end
cache_getter(&block) click to toggle source
# File lib/typhoeus/hydra.rb, line 107
def cache_getter(&block)
  @cache_getter = block
end
cache_setter(&block) click to toggle source
# File lib/typhoeus/hydra.rb, line 111
def cache_setter(&block)
  @cache_setter = block
end
clear_cache_callbacks() click to toggle source
# File lib/typhoeus/hydra.rb, line 46
def clear_cache_callbacks
  @cache_setter = nil
  @cache_getter = nil
end
disable_memoization() click to toggle source
# File lib/typhoeus/hydra.rb, line 103
def disable_memoization
  @memoize_requests = false
end
fire_and_forget() click to toggle source
# File lib/typhoeus/hydra.rb, line 51
def fire_and_forget
  @queued_requests.each {|r| queue(r, false)}
  @multi.fire_and_forget
end
on_complete(&block) click to toggle source
# File lib/typhoeus/hydra.rb, line 115
def on_complete(&block)
  @on_complete = block
end
on_complete=(proc) click to toggle source
# File lib/typhoeus/hydra.rb, line 119
def on_complete=(proc)
  @on_complete = proc
end
queue(request, obey_concurrency_limit = true) click to toggle source
# File lib/typhoeus/hydra.rb, line 56
def queue(request, obey_concurrency_limit = true)
  return if assign_to_stub(request)

  # At this point, we are running over live HTTP. Make sure we haven't
  # disabled live requests.
  check_allow_net_connect!(request)

  if @running_requests >= @max_concurrency && obey_concurrency_limit
    @queued_requests << request
  else
    if request.method == :get
      if @memoize_requests && @memoized_requests.has_key?(request.url)
        if response = @retrieved_from_cache[request.url]
          request.response = response
          request.call_handlers
        else
          @memoized_requests[request.url] << request
        end
      else
        @memoized_requests[request.url] = [] if @memoize_requests
        get_from_cache_or_queue(request)
      end
    else
      get_from_cache_or_queue(request)
    end
  end
end
run() click to toggle source
# File lib/typhoeus/hydra.rb, line 84
def run
  while !@active_stubs.empty?
    m = @active_stubs.first
    while request = m.requests.shift
      response = m.response
      response.request = request
      handle_request(request, response)
    end
    @active_stubs.delete(m)
  end

  @multi.perform
ensure
  @multi.reset_easy_handles{|easy| release_easy_object(easy)}
  @memoized_requests = {}
  @retrieved_from_cache = {}
  @running_requests = 0
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.