от
Я создаю страницу поиска, который отображает до 9 скоростей. На frontend, я посылаю запрос на мой Rails приложение, содержащий необходимые сведения, чтобы захватить 9 ставок. В один из моих контроллеров рельсы, я ползу веб-страницу, чтобы получить скорость. Это может занять от 2 до 15 секунд. Я хотел бы запустить все 9 запросов в фоновом режиме, так что я может обрабатывать другие запросы, которые приходят в. Например, пользователь может осуществлять поиск и результаты будут отображаться. Я пытаюсь использовать параллельное-рубиновый камень с обещаниями. Переменная cleaned_params является массивом данных, необходимых для выполнения запроса. Есть до 9 запросов данных. Вот что я так далеко:
 tasks = cleaned_params.map { |request_data| 
    Concurrent::Promises.future(request_data) { |request_data| api_get_rate(request_data) }
  }

  # My tasks could still be in the pending state, all_promises is a new promise that will be fulfilled once all fo the inner promises have been fulfilled
  all_promises = Concurrent::Promises.zip(*tasks)

# Use all_promises.value! to block 

Сейчас я вижу, что все запросы к api_get_rate включаются в работу, но в моей функции api_get_rate
, я делаю вызов метода в другой класс,
BetterRateOverride.check_rate
. Когда я запускаю этот же код синхронно, я успешно смогла позвонить по указанным выше методом, но когда я запускаю его, как у меня сейчас настройки, мой код просто зависает, когда он получает этот вызов. Почему это происходит? Это не возможно, чтобы вызвать метод из другого класса, в то время как в фоновом потоке? Делать обещания выполняются в фоновых потоках? Я читал, что обещает работать в рубиновый глобального пула потоков. Если это не лучший подход, можете ли вы направить меня в правильном направлении? Спасибо за любую помощь.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
...