gpt4 book ai didi

ruby - 如何处理线程返回 Ruby

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:37 26 4
gpt4 key购买 nike

我有一个 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 的临时文件。我正在摸索到底在哪里做那件事/如何获得这些信息。如果有人能给我指出正确的方向,那就太好了。

最佳答案

有两点,首先,当您将“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

摆脱它,它应该会带你去你想去的地方。

关于ruby - 如何处理线程返回 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com