Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ThreadPool
- def self.execute(objects:, method:, pool: 5)
- new(objects: objects, method: method, pool: pool).execute
- end
- def initialize(objects:, method:, pool:)
- @objects = objects
- @method = method
- @pool = pool
- @queue = queue
- end
- def execute
- (0...pool).map { thread }.map(&:join)
- end
- private
- attr_reader :objects, :method, :pool
- def thread
- Thread.new { process_objects }
- end
- def process_objects
- while object = @queue.pop(true)
- object_description = object.inspect
- begin
- puts "Executing: #{object_description}##{method}"
- object.send(method)
- rescue StandardError => exception
- Rollbar.error(exception)
- end
- end
- rescue ThreadError
- true
- ensure
- ActiveRecord::Base.clear_active_connections!
- end
- def queue
- objects_queue = Queue.new
- objects.each { |obj| objects_queue << obj }
- objects_queue
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement