如何处理线程返回Ruby

时间:2013-08-15 21:57:53

标签: ruby file-io

我有一个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的临时文件。我磕磕绊绊要知道在哪里/如何获取这些信息。如果有人能指出我正确的方向,那将是伟大的。

1 个答案:

答案 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

关闭它,它应该让你到达你想去的地方。