Задача: создать API, который выполняет 10 вызовов API к другим службам. Совместите их результат и получите отдачу.

Традиционный способ: используйте какой-нибудь HTTP-клиент (https://github.com/nahi/httpclient для меня). Цикл for и объедините их. Для меня это заняло около 20 с лишним секунд.

Решение: поток. Немного погуглил, и тогда я мог придумать код для выполнения задачи.

Строка 1: detail_hashtag - это массив хастагов. Например: [«природа», «мир», «инста»,….]

Для каждого из этих хэштегов я должен выполнить вызов API. Один из способов - запустить каждый из них в отдельном потоке, но размер нашего массива может быть большим, и наличие такого количества потоков может быть не идеальным.

Строка 2: Итак, у нас есть что-то под названием MAX_THREADS.

  • Я делю массив на партии, размер каждой партии равен MAX_THREAD.
  • Для каждого из этих пакетов я буду запускать все запросы в потоках и ждать, пока каждый запрос не вернет ответ.
  • Что делать, если придет ошибка?
threads.each do |x|
  begin
    x.join
  rescue RuntimeError => y 
    puts "Failed:: #{y.message}" 
  end
end

Улучшения: с 8 потоками время сократилось до 4 секунд с 30 секунд.

Еще больше: я не знал об этом замечательном рубиновом камне для выполнения всех этих задач. Параллельный - https://github.com/grosser/parallel. Комментарий ниже, если кто-то его использовал.

Вы можете связаться с автором по адресу [email protected].