Module: Nucleon::Parallel::InstanceMethods
- Defined in:
- lib/core/facade.rb
Overview
Instance Method Summary collapse
-
#parallel(method, args, *shared_args) ⇒ Object
—.
-
#parallel_array(method, array_args, *shared_args) ⇒ Object
—.
- #parallel_finalize ⇒ Object
-
#parallel_hash(method, hash_args, *shared_args) ⇒ Object
—.
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_finalize ⇒ Object
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 |