31 lines
785 B
Ruby
31 lines
785 B
Ruby
|
module Bundler
|
||
|
module ParallelWorkers
|
||
|
class ThreadWorker < Worker
|
||
|
|
||
|
private
|
||
|
|
||
|
# On platforms where fork is not available
|
||
|
# use Threads for parallely downloading gems
|
||
|
#
|
||
|
# @param size [Integer] Size of thread worker pool
|
||
|
# @param func [Proc] Job to be run inside thread worker pool
|
||
|
def prepare_workers(size, func)
|
||
|
@threads = size.times.map do |i|
|
||
|
Thread.start do
|
||
|
loop do
|
||
|
obj = @request_queue.deq
|
||
|
break if obj.equal? POISON
|
||
|
begin
|
||
|
@response_queue.enq func.call(obj, i)
|
||
|
rescue Exception => e
|
||
|
@response_queue.enq(WrappedException.new(e))
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|
||
|
end
|