Код IT
← Каталог

Асинхронность в Ruby — Архитектурные последствия событийной модели

Фрагмент из «Асинхронность в Ruby»: Архитектурные последствия событийной модели.

Ruby main.rb
require 'async'
require 'async/semaphore'
require 'async/http/internet'

Async do
  semaphore = Async::Semaphore.new(5)
  internet = Async::HTTP::Internet.new
  ids = (1..20).to_a

  tasks = ids.map do |id|
    Async do
      semaphore.async do
        response = internet.get("https://api.example.com/users/#{id}")
        puts "user=#{id} status=#{response.status}"
        response.close
      end
    end
  end

  tasks.each(&:wait)
ensure
  internet&.close
end
require 'async'
require 'async/semaphore'
require 'async/http/internet'

Async do
  semaphore = Async::Semaphore.new(5)
  internet = Async::HTTP::Internet.new
  ids = (1..20).to_a

  tasks = ids.map do |id|
    Async do
      semaphore.async do
        response = internet.get("https://api.example.com/users/#{id}")
        puts "user=#{id} status=#{response.status}"
        response.close
      end
    end
  end

  tasks.each(&:wait)
ensure
  internet&.close
end