我创造了很多线程:
(1..255).each do |n|
Thread.new do
sleep(10) # does a lot of work
end
end
# at this point I need to make sure all the threads completed
我希望我可以将每个帖子添加到ThreadGroup
并在wait_until_all_threads_complete
上调用ThreadGroup
之类的函数。但是我在Ruby文档中看不到任何明显的东西。
我是否必须将每个线程添加到一个数组中,然后遍历每个调用thread.join
的线程?对于这种极其常见的用例,必须有一种更简单的方法。
threads = (1..255).map do |n|
Thread.new do
sleep(10) # does a lot of work
end
end
threads.each do |thread|
thread.join
end
答案 0 :(得分:1)
如果将线程分配给具有ThreadGroup#add的ThreadGroup,则可以将Thread#join或其他Thread方法映射到ThreadGroup#list方法返回的组的每个成员。例如:
thread_group = ThreadGroup.new
255.times do
thread_group.add Thread.new { sleep 10 }
end
thread_group.list.map &:join
这只会加入属于 thread_group 的线程,而不是ThreadGroup :: Default。