红宝石的平行性

And*_*ock 2 ruby multithreading

我在我的ruby构建脚本中有一个循环,遍历每个项目并调用msbuild并执行各种其他位,如minify css/js.

每个循环迭代都独立于其他循环,所以我想对它进行分析.

我该怎么做呢?

我试过了:

myarray.each{|item|
    Thread.start {

        # do stuff

     }
}
puts "foo"
Run Code Online (Sandbox Code Playgroud)

但红宝石似乎马上退出(打印"foo").也就是说,它运行在循环上,启动一个线程的负载,但因为没有后each,红宝石退出杀死其他线程:(

我知道我能做到thread.join,但如果我在循环中这样做,那么它就不再平行了.

我错过了什么?

我知道http://peach.rubyforge.org/,但使用它我得到各种奇怪的行为,看起来像我不知道如何解决的变量范围问题:(

编辑:如果我可以在放入"foo"之前等待所有子线程执行,或者至少主ruby线程退出,这将是有用的.这可能吗?

谢谢

Rus*_*ell 6

将所有线程存储在一个数组中并循环遍历数组调用连接:

threads = myarray.map do |item|
  Thread.start do
    # do stuff
  end
end
threads.each { |thread| thread.join }
puts "foo"
Run Code Online (Sandbox Code Playgroud)