我有一个ruby脚本,我正在解析一个大的csv文件。除了如何处理线程的返回值之外,我已经处理好并且工作得很好。我有:
length = (ses.size/4).ceil
ses.each_slice(length) do |x|
threads << Thread.new { a,b = splat x }
end
threads.each { |thr|
thr.join
}
'splat'返回需要附加到输出文件out1和out2的临时文件。我磕磕绊绊要知道在哪里/如何获取这些信息。如果有人能指出我正确的方向,那将是伟大的。
答案 0 :(得分:1)
两件事,首先,当你将'x'传递给线程时,通过改变它来使线程局部更安全是更安全的:
threads << Thread.new { a,b = splat x }
进入这个:
threads << Thread.new(x) { |x| a,b = splat x }
接下来,要获取退货值,请使用:value加入。
所以这是一个我掀起的快速演示:
dummy = [
['a.txt', 'b.txt'],
['c.txt', 'd.txt'],
['e.txt', 'f.txt'],
['g.txt', 'h.txt'],
['i.txt', 'j.txt'],
['k.txt', 'l.txt']
]
threads = dummy.map do |pair|
Thread.new(pair) { |val| val }
end
vals = threads.map(&:value) # equiv. to 'threads.map { |t| t.value }'
puts vals.inspect
关闭它,它应该让你到达你想去的地方。