diff options
Diffstat (limited to 'lib/rainbows/queue_pool.rb')
-rw-r--r-- | lib/rainbows/queue_pool.rb | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/rainbows/queue_pool.rb b/lib/rainbows/queue_pool.rb index ce888d8..06f7c40 100644 --- a/lib/rainbows/queue_pool.rb +++ b/lib/rainbows/queue_pool.rb @@ -5,24 +5,26 @@ require 'thread' # Thread pool class based on pulling off a single Ruby Queue. # This is NOT used for the ThreadPool class, since that class does not # need a userspace Queue. -class Rainbows::QueuePool < Struct.new(:queue, :threads) +class Rainbows::QueuePool + attr_reader :queue + def initialize(size = 20) q = Queue.new - self.threads = (1..size).map do + @threads = (1..size).map do Thread.new do while job = q.shift yield job end end end - self.queue = q + @queue = q end def quit! - threads.each { |_| queue << nil } - threads.delete_if do |t| + @threads.each { |_| @queue << nil } + @threads.delete_if do |t| Rainbows.tick t.alive? ? t.join(0.01) : true - end until threads.empty? + end until @threads.empty? end end |