Rubyのマルチプロセス処理後の結果を配列にまとめたいけどできない
以下のコードにおいて,parallelFor
メソッドの出力を順番はバラバラでよいのでvalueList
に全て格納したいです.
どのようにコードを記述すればよいのでしょうか.
ご教授お願い致します.
(現在の実行結果も質問下部に掲載します)
【追加の質問】
1点目:上記のようなコードをマルチスレッドとマルチプロセスの両方で動かせた場合,処理速度はどのくらい変わりますのでしょうか.
2点目:スパコン等でマルチプロセスで実行させたいと考えていまして,どうにかしてマルチプロセスで実行できる方法は無いのでしょうか.
require 'test/unit'
require 'parallel'
def parallelFor(value, b = nil)
p "value = #{value}"
p "b = #{b}"
return value
end
class UnitTest < Test::Unit::TestCase
def test_parallelFor
valueList = []
vv = [10, 11, 12, 13, 14]
Parallel.each_with_index(vv, :in_processes => 4){|v, i|
valueTrial = parallelFor(v, i == 0 ? true : nil)
p "valueTrial = #{valueTrial}"
valueList << valueTrial
}
p "valueList = #{valueList}"
end
end
「テストコード実行結果」
Started
"value = 10"
"b = true"
"valueTrial = 10"
"value = 11"
"b = "
"valueTrial = 11"
"value = 12"
"value = 13"
"b = "
"valueTrial = 13"
"b = "
"valueTrial = 12"
"value = 14"
"b = "
"valueTrial = 14"
"valueList = []"
.
Finished in 0.022698 seconds.