Ich möchte wissen, wie Multithread in Ruby und speichern Sie die Ergebnisse der untergeordneten Prozesse in einem Array der übergeordneten.Multiprocesses Ruby und speichern Variablen
Das Array, das ich verarbeiten möchte, hat 400 Elemente.
Ich habe 2 Lösungen ausprobiert.
Solution: 1 (http://www.rubydoc.info/gems/parallel-forkmanager/Parallel/ForkManager)
require forkmanager
eng = []
array = [{'ip' => 12.34.56,'hostname' => ''}, {'ip' => 22.22.22, 'hostname' => ''}
pm = Parallel::ForkManager.new(20)
pm.run_on_finish{|pid, exit_code, return_list|
eng << return_list
}
array.each do |node|
pm.start(node) and wait
new_node = process(node) #gives a value to hostname
pm.finish(0, new_node)
end
pm.wait_all_children
puts eng #expects it to return new node but it returns node.
Solution 2: (https://github.com/grosser/parallel)
require 'parallel'
eng =[]
array = [{'ip' => 12.34.56,'hostname' => ''}, {'ip' => 22.22.22, 'hostname' => ''}
Parallel.map(array, in_processes: 20) do |node|
new_node = process(node) #gives a value to hostname
eng << new_node
end
puts eng #expected to provide nodes. returns empty array instead.