Module: Nucleon::Parallel::InstanceMethods

Defined in:
lib/core/facade.rb

Overview


Instance Method Summary collapse

Instance Method Details

#parallel(method, args, *shared_args) ⇒ Object




26
27
28
29
30
31
32
33
34
35
36
# File 'lib/core/facade.rb', line 26

def parallel(method, args, *shared_args)
  results = nil

  case args
  when Hash
    results = parallel_hash(method, args, *shared_args)
  when Array, String, Symbol
    results = parallel_array(method, args, *shared_args)
  end
  results
end

#parallel_array(method, array_args, *shared_args) ⇒ Object




40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/core/facade.rb', line 40

def parallel_array(method, array_args, *shared_args)
  results    = []
  array_args = [ array_args ] unless array_args.is_a?(Array)

  if Nucleon.parallel?
    array_args.each do |arg|
      results << future.send(method, arg, *shared_args)
    end
    results.map { |future| future.value } # Wait for all to finish.
  else
    array_args.each do |arg|
      results << send(method, arg, *shared_args)
    end
  end
  results
end

#parallel_finalizeObject



20
21
22
# File 'lib/core/facade.rb', line 20

def parallel_finalize
  # Override if needed
end

#parallel_hash(method, hash_args, *shared_args) ⇒ Object




59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/core/facade.rb', line 59

def parallel_hash(method, hash_args, *shared_args)
  results = {}

  if Nucleon.parallel?
    hash_args.each do |key, value|
      results[key] = future.send(method, key, value, *shared_args)
    end
    results.keys.each do |key| # Wait for all to finish.
      results[key] = results[key].value
    end
  else
    hash_args.each do |key, value|
      results[key] = send(method, key, value, *shared_args)
    end
  end
  results
end