数组我试图使用并行宝石红宝石调用数组追加到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 [一二三四五]'。编辑问题。 –