我有一个可以划分为独立单元的计算,我现在处理它的方式是创建固定数量的线程,然后将工作 block 交给每个线程来完成。所以在伪代码中它是这样的
# main thread
work_units.take(10).each {|work_unit| spawn_thread_for work_unit}
def spawn_thread_for(work)
Thread.new do
do_some work
more_work = work_units.pop
spawn_thread_for more_work unless more_work.nil?
end
end
基本上,一旦创建了初始数量的线程,每个线程都会做一些工作,然后继续从工作堆栈中取出要完成的事情,直到什么都不剩下。当我在 irb 中运行时,一切正常,但是当我使用解释器执行脚本时,一切都不太顺利。我不确定如何让主线程等待所有工作完成。有没有好的方法可以做到这一点,或者我是否坚持在主线程中执行 sleep 10 until work_units.empty?
最佳答案
在 ruby 1.9(和 2.0)中,您可以使用标准库中的 ThreadsWait
来达到此目的:
require 'thread'
require 'thwait'
threads = []
threads << Thread.new { }
threads << Thread.new { }
ThreadsWait.all_waits(*threads)
关于ruby - 我如何管理 ruby 线程以便它们完成所有工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6241384/