gpt4 book ai didi

ruby - 我如何管理 ruby​​ 线程以便它们完成所有工作?

转载 作者:数据小太阳 更新时间:2023-10-29 06:28:24 26 4
gpt4 key购买 nike

我有一个可以划分为独立单元的计算,我现在处理它的方式是创建固定数量的线程,然后将工作 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com