我想要一个线程数组[],这样如果一个线程是“空闲”的或者没有在任何程序上工作,那么它将被分配一个新的任务。Ruby检查一个线程是否“空闲”
是否有无论如何检查红宝石中的线程是否是“免费”的。目前我用过
if (threads[thread_id].nil? || !threads[thread_id].status)
# yes thread is free
但是好像不是正确的方法,有的线程仍然覆盖其他工作。
我想要一个线程数组[],这样如果一个线程是“空闲”的或者没有在任何程序上工作,那么它将被分配一个新的任务。Ruby检查一个线程是否“空闲”
是否有无论如何检查红宝石中的线程是否是“免费”的。目前我用过
if (threads[thread_id].nil? || !threads[thread_id].status)
# yes thread is free
但是好像不是正确的方法,有的线程仍然覆盖其他工作。
请参阅Deadlock in ThreadPool针对工作线程池实现的回答。
有了一个线程池,你可以做这样的事情:
pool = ThreadPool.new(10) # up to 10 threads
email_addresses.each do |addr|
pool.process {send_mail_to addr}
end
线程池#程序将阻止如果没有可用线程来完成工作,继续当一个是免费的。
也有执行一个线程池,像宝石:http://rubygems.org/gems/work_queue
threads.each.map {|t| t.alive?}.none?
返回true,如果所有线程都死了
,如果你有这样的事情:
threads << Thread.new do
# do dome work ...
end
和你想要检查是否所有的线程都没有活动(即死),你总是可以使用这个:
threads.each.map {|t| t.alive?}.none?
我们正在从数组中检查一个线程并检查它是否存在。 map方法正在创建具有真/假值(活/死)的数组。最后没有?枚举的方法应该返回true如果所有成员都是假的(即所有线程都死了)
可能的重复:http://stackoverflow.com/questions/6558828/thread-and-queue – steenslag
@steenslag我没有看到任何东西类似的...在那个话题中,他们需要一个队列来存储作品。我不需要这个,我只想知道一个线程是否可以自由使用 – w00d
也许可以测试'alive?',或者如果你想在同一时间想要拥有的多个线程上检查'Thread .list.size' – derp