JP.*_*JP. 5 ruby queue multithreading
我有一个我需要执行的任务,do_stuff(opts)每个需要大约1个,即使其中1到10个并行运行.我需要在最后收集每个操作的结果数组.
如果我有30个东西做,我将如何有效使用线程来排队了do_stuff(opts)所以不超过10同时运行操作,但结果的排列没有给出/印刷/等等,直到所有(30)任务已经完成?
我通常至少有一些代码试图说明我的意思,但是使用线程我有点亏本!提前致谢
我不知道它对于更复杂的应用程序的效果如何,但我发现这样的东西可以很好地用于使用 macruby 的简单线程场景。
thread_limit = 4
threads = []
things_to_process.each do |thing|
until threads.map { |t| t.status }.count("run") < thread_limit do sleep 5 end
threads << Thread.new { the_task(thing) }
end
output = threads.map { |t| t.value }
Run Code Online (Sandbox Code Playgroud)
在允许主线程继续执行以启动下一个线程之前,直到循环等待直到运行的创建线程少于指定数量。
输出变量将被分配一个由 the_task 返回的值的数组,其排序对应于输入数组things_to_process。主线程将阻塞,直到每个创建的线程都返回一个值。