數組我試圖使用並行寶石紅寶石調用數組追加到Ruby的
require 'parallel'
arr = %w[one two three four five]
result ||= []
Parallel.each(arr) do |elem|
result << Random.rand(10)
end
但是,當我運行它,結果數組總是空的每個元素的功能。爲什麼不附加? 它的行爲相同的方式,當result
是紅寶石Queue
數組我試圖使用並行寶石紅寶石調用數組追加到Ruby的
require 'parallel'
arr = %w[one two three four five]
result ||= []
Parallel.each(arr) do |elem|
result << Random.rand(10)
end
但是,當我運行它,結果數組總是空的每個元素的功能。爲什麼不附加? 它的行爲相同的方式,當result
是紅寶石Queue
傳遞一個:in_threads
選項:
require 'parallel'
arr = %w[one two three four five]
result ||= []
Parallel.each(arr, :in_threads => 8) do |elem|
result << Random.rand(10)
end
不要問我詳細解釋這個;我只是在瀏覽Parallel項目的源代碼,並將其視爲一種可能性,並嘗試了它。
我的猜測是它告訴線程以線程運行,以便它們可以共享result
變量,而不是作爲單獨的進程運行。但這只是一個猜測。
我最終使用了這個,':in_threads'設置爲'arr.count' –
它並不B/C Parallel
叉追加到不再共享相同的參考result
子進程。在這種情況下,一種選擇可能是使用Parallel.map
和結果數組追加到result
,即
result ||= []
result += Parallel.map(arr) { |elem| Random.rand(10) }
每個<<
操作發生在其自己的獨立過程中(即並行),因此它會變換不同的result
變量。
發生這種情況的原因是Parallel
forks進程和分叉進程有自己的內存。
'arr'是一個數組'%w [一二三四五]'。編輯問題。 –