Sha256: aa0f018b3ce188d9d1f43911a67d7e98619c700305156c19087e5340526c14c8

Contents?: true

Size: 606 Bytes

Versions: 14

Compression:

Stored size: 606 Bytes

Contents

# frozen_string_literal: true

module ShopifyCLI
  class ThreadPool
    attr_reader :errors

    def initialize(pool_size: 10)
      @jobs = Queue.new
      @pool = Array.new(pool_size) { spawn_thread }
    end

    def schedule(job)
      @jobs << job
    end

    def shutdown
      @pool.size.times do
        schedule(-> { throw(:stop_thread) })
      end
      @pool.map(&:join)
    ensure
      @jobs.close
    end

    private

    def spawn_thread
      Thread.new do
        catch(:stop_thread) do
          loop do
            @jobs.pop.call
          end
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
shopify-cli-2.15.1 lib/shopify_cli/thread_pool.rb
shopify-cli-2.15.0 lib/shopify_cli/thread_pool.rb
shopify-cli-2.14.0 lib/shopify_cli/thread_pool.rb
shopify-cli-2.13.0 lib/shopify_cli/thread_pool.rb
shopify-cli-2.12.0 lib/shopify_cli/thread_pool.rb
shopify-cli-2.11.2 lib/shopify_cli/thread_pool.rb
shopify-cli-2.11.1 lib/shopify_cli/thread_pool.rb
shopify-cli-2.11.0 lib/shopify_cli/thread_pool.rb
shopify-cli-2.10.2 lib/shopify_cli/thread_pool.rb
shopify-cli-2.10.1 lib/shopify_cli/thread_pool.rb
shopify-cli-2.10.0 lib/shopify_cli/thread_pool.rb
shopify-cli-2.9.0 lib/shopify_cli/thread_pool.rb
shopify-cli-2.8.0 lib/shopify_cli/thread_pool.rb
shopify-cli-2.7.4 lib/shopify_cli/thread_pool.rb