Object
# File lib/typhoeus/hydra.rb, line 27 def self.hydra @hydra ||= new end
# File lib/typhoeus/hydra.rb, line 31 def self.hydra=(val) @hydra = val end
# 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
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
# File lib/typhoeus/hydra.rb, line 107 def cache_getter(&block) @cache_getter = block end
# File lib/typhoeus/hydra.rb, line 111 def cache_setter(&block) @cache_setter = block end
# File lib/typhoeus/hydra.rb, line 46 def clear_cache_callbacks @cache_setter = nil @cache_getter = nil end
# File lib/typhoeus/hydra.rb, line 103 def disable_memoization @memoize_requests = false end
# File lib/typhoeus/hydra.rb, line 51 def fire_and_forget @queued_requests.each {|r| queue(r, false)} @multi.fire_and_forget end
# File lib/typhoeus/hydra.rb, line 115 def on_complete(&block) @on_complete = block end
# File lib/typhoeus/hydra.rb, line 119 def on_complete=(proc) @on_complete = proc end
# 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
# 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
Generated with the Darkfish Rdoc Generator 2.