module Nucleon::Parallel::InstanceMethods

Public Instance Methods

parallel(method, args, *shared_args) click to toggle source
   # File lib/core/facade.rb
26 def parallel(method, args, *shared_args)
27   results = nil
28 
29   case args
30   when Hash
31     results = parallel_hash(method, args, *shared_args)
32   when Array, String, Symbol
33     results = parallel_array(method, args, *shared_args)
34   end
35   results
36 end
parallel_array(method, array_args, *shared_args) click to toggle source
   # File lib/core/facade.rb
40 def parallel_array(method, array_args, *shared_args)
41   results    = []
42   array_args = [ array_args ] unless array_args.is_a?(Array)
43 
44   if Nucleon.parallel?
45     array_args.each do |arg|
46       results << future.send(method, arg, *shared_args)
47     end
48     results.map { |future| future.value } # Wait for all to finish.
49   else
50     array_args.each do |arg|
51       results << send(method, arg, *shared_args)
52     end
53   end
54   results
55 end
parallel_finalize() click to toggle source
   # File lib/core/facade.rb
20 def parallel_finalize
21   # Override if needed
22 end
parallel_hash(method, hash_args, *shared_args) click to toggle source
   # File lib/core/facade.rb
59 def parallel_hash(method, hash_args, *shared_args)
60   results = {}
61 
62   if Nucleon.parallel?
63     hash_args.each do |key, value|
64       results[key] = future.send(method, key, value, *shared_args)
65     end
66     results.keys.each do |key| # Wait for all to finish.
67       results[key] = results[key].value
68     end
69   else
70     hash_args.each do |key, value|
71       results[key] = send(method, key, value, *shared_args)
72     end
73   end
74   results
75 end