class Parallizer

Constants

DEFAULT_WORK_QUEUE_SIZE
VERSION

Attributes

call_infos[R]
calls[R]
client[R]
options[R]
proxy[R]

Public Class Methods

in_parallizer_thread?() click to toggle source
# File lib/parallizer.rb, line 34
def in_parallizer_thread?
  Thread.current[:parallizer_thread] == true
end
new(client, options = {}) click to toggle source
# File lib/parallizer.rb, line 41
def initialize(client, options = {})
  @client = client
  @options = {:retries => 0}.merge(options)
  @call_infos = {}
end
work_queue() click to toggle source
# File lib/parallizer.rb, line 23
def work_queue
  # TODO: share the work queue among calling threads??
  queue = Thread.current[:parallizer_work_queue]
  if queue.nil? || Thread.current[:parallizer_work_queue_size] != work_queue_size
    queue = Thread.current[:parallizer_work_queue] = ::Parallizer::Worker.pool(:size => work_queue_size)
    Thread.current[:parallizer_work_queue_size] = work_queue_size
  end
  
  queue
end
work_queue_size() click to toggle source
# File lib/parallizer.rb, line 15
def work_queue_size
  @work_queue_size || DEFAULT_WORK_QUEUE_SIZE
end
work_queue_size=(work_queue_size) click to toggle source
# File lib/parallizer.rb, line 19
def work_queue_size=(work_queue_size)
  @work_queue_size = work_queue_size
end

Public Instance Methods

add_call(method_name, *args) click to toggle source
# File lib/parallizer.rb, line 51
def add_call(method_name, *args)
  add.send(method_name, *args)
end
all_call_results() click to toggle source
# File lib/parallizer.rb, line 63
def all_call_results
  proxy = create_proxy

  call_infos.keys.inject({}) do |result, method_name_and_args|
    result[method_name_and_args] = proxy.send(*method_name_and_args)

    result
  end
end
create_proxy() click to toggle source
# File lib/parallizer.rb, line 55
def create_proxy
  raise ArgumentError, "Cannot create another proxy" if @proxy

  execute

  ::Parallizer::Proxy.new(client, call_infos)
end

Private Instance Methods

add_invoked(method_name_and_args) click to toggle source
# File lib/parallizer.rb, line 75
def add_invoked(method_name_and_args)
  raise ArgumentError, "Cannot add calls after proxy has been generated" if @proxy

  return if call_infos[method_name_and_args]

  call_info = {
    :future => ::Parallizer::work_queue.future(:run, @client, method_name_and_args.first, method_name_and_args[1..-1], options),
    :result => nil,
    :exception => nil
  }
  call_infos[method_name_and_args] = call_info
end
execute() click to toggle source
# File lib/parallizer.rb, line 88
def execute
  call_infos.each do |method_name_and_args, call_info|
    call_info.merge!(call_info[:future].value)
  end
end