class GHArchive::ThreadPool
Public Class Methods
new(size)
click to toggle source
# File lib/gh-archive.rb, line 14 def initialize(size) @size = size @threads = [] @queue = [] @mutex = Mutex.new @consumer_thread = Thread.start do while !@shutdown || @threads.size > 0 || @queue.size > 0 sleep 0.1 if @queue.size == 0 || @threads.size == @size @threads.delete_if { |t| !t.alive? } if @threads.size < @size && @queue.size > 0 @mutex.synchronize do args, job = @queue.shift @threads << Thread.start(*args, &job) end end end end end
Public Instance Methods
alive?()
click to toggle source
# File lib/gh-archive.rb, line 65 def alive? @consumer_thread.alive? end
enqueued()
click to toggle source
# File lib/gh-archive.rb, line 57 def enqueued return @queue.size end
process(*args, &block)
click to toggle source
# File lib/gh-archive.rb, line 35 def process(*args, &block) raise "Block expected" unless block_given? raise "Can not add jobs while shutting down" if @shutdown @mutex.synchronize do @queue << [args, block] end return self.enqueued end
shutdown()
click to toggle source
# File lib/gh-archive.rb, line 46 def shutdown @shutdown = true end
shutdown!()
click to toggle source
# File lib/gh-archive.rb, line 50 def shutdown! self.shutdown @mutex.synchronize do @queue.clear end end
shutdown?()
click to toggle source
# File lib/gh-archive.rb, line 61 def shutdown? @shutdown end
wait()
click to toggle source
# File lib/gh-archive.rb, line 69 def wait while alive? sleep 0.1 end end