Задача: создать 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].