How can I return a value from a thread in Ruby?

后端 未结 5 1102
清歌不尽
清歌不尽 2021-02-03 19:08

If I have the following code :

threads = []
(1..5).each do |i|
  threads << Thread.new { `process x#{i}.bin` } 
end
threads.each do |t|
  t.join
  # i\'d l         


        
5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-02-03 19:40

    The script

    threads = []
    (1..5).each do |i|
      threads << Thread.new { Thread.current[:output] = `echo Hi from thread ##{i}` }
    end
    threads.each do |t|
      t.join
      puts t[:output]
    end
    

    illustrates how to accomplish what you need. It has the benefit of keeping the output with the thread that generated it, so you can join and get the output of each thread at any time. When run, the script prints

    Hi from thread #1
    Hi from thread #2
    Hi from thread #3
    Hi from thread #4
    Hi from thread #5
    

提交回复
热议问题