Sha256: 6f60e9f0beffbf68662254262acce2fa4ad8281123c0283f5061612984b98d68

Contents?: true

Size: 565 Bytes

Versions: 43

Compression:

Stored size: 565 Bytes

Contents

module Metanorma
  class WorkersPool
    def initialize(workers)
      @workers = workers
      @queue = SizedQueue.new(@workers)
      @threads = Array.new(@workers) do
        Thread.new do
          catch(:exit) do
            loop do
              job, args = @queue.pop
              job.call *args
            end
          end
        end
      end
    end

    def schedule(*args, &block)
      @queue << [block, args]
    end

    def shutdown
      @workers.times do
        schedule { throw :exit }
      end
      @threads.map(&:join)
    end
  end
end

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
metanorma-1.7.7 lib/metanorma/worker_pool.rb
metanorma-1.7.6 lib/metanorma/worker_pool.rb
metanorma-1.7.5 lib/metanorma/worker_pool.rb
metanorma-1.7.4 lib/metanorma/worker_pool.rb
metanorma-1.7.3 lib/metanorma/worker_pool.rb
metanorma-1.7.2 lib/metanorma/worker_pool.rb
metanorma-1.7.1 lib/metanorma/worker_pool.rb
metanorma-1.7.0 lib/metanorma/worker_pool.rb
metanorma-1.6.9 lib/metanorma/worker_pool.rb
metanorma-1.6.8 lib/metanorma/worker_pool.rb
metanorma-1.6.7 lib/metanorma/worker_pool.rb
metanorma-1.6.6 lib/metanorma/worker_pool.rb
metanorma-1.6.5 lib/metanorma/worker_pool.rb
metanorma-1.6.4 lib/metanorma/worker_pool.rb
metanorma-1.6.3 lib/metanorma/worker_pool.rb
metanorma-1.6.2 lib/metanorma/worker_pool.rb
metanorma-1.6.1 lib/metanorma/worker_pool.rb
metanorma-1.6.0 lib/metanorma/worker_pool.rb
metanorma-1.5.12 lib/metanorma/worker_pool.rb
metanorma-1.5.11 lib/metanorma/worker_pool.rb