1
我有类似下面前完成:如何等待所有线程执行的下一行
all_hosts.each do |hostname|
Thread.new {
...
}
end
# next line of execution
主机的每个上述打开自己的线程和执行的命令。我希望等待所有线程完成执行,然后再移至文件的下一部分。有没有一个简单的方法来做到这一点?
我有类似下面前完成:如何等待所有线程执行的下一行
all_hosts.each do |hostname|
Thread.new {
...
}
end
# next line of execution
主机的每个上述打开自己的线程和执行的命令。我希望等待所有线程完成执行,然后再移至文件的下一部分。有没有一个简单的方法来做到这一点?
使用Thread#join
将等待线程终止。
要做到这一点,你需要保存线程;所以用map
代替each
:
threads = all_hosts.map do |hostname|
Thread.new {
# commands
}
end
threads.each(&:join)
的Thread
documentation解释它:
或者,您也可以使用数组在下面的例子中一次处理多个线程,如:
threads = [] threads << Thread.new { puts "Whats the big deal" } threads << Thread.new { 3.times { puts "Threads are fun!" } }
创建几个线程,我们等待后他们都连续完成。
threads.each { |thr| thr.join }
应用到你的代码:
threads = []
all_hosts.each do |hostname|
threads << Thread.new { ... }
end
threads.each(&:join)
# next line of execution