Отправка тысяч запросов одновременно с Ruby на Rails? - PullRequest
1 голос
/ 04 августа 2020

Мне нужно разработать конечную точку в рельсах, которая будет отправлять (возможно) сотни / тысячи запросов, обрабатывать их, а затем возвращать / отображать json пользователю / клиенту.

Я пробовал использовать поток пул размером 5, но это заняло вечность, но когда я попытался увеличить размер до количества запросов, он вызвал исключение ThreadError: can't create Thread: Resource temporarily unavailable.

Я не думаю, что могу использовать фоновое задание / рабочий для этого, потому что я должен вернуть результат.

Итак, что мне делать?

Я думал, что мне нужно обернуть процесс в 20se c тайм-аут, чтобы он не доходил до направляющих 30se c limit, и если он все еще не завершен в 20se c, он вернет незавершенный результат. Это выглядит так:

result = Queue.new
    begin
      Timeout::timeout(20) do
        elements.each do |element|
          pool.process {
            response = send_request(element)
            result << response
          }
        end
        pool.shutdown
      end
    rescue Timeout::Error
      pool.shutdown
    end
    result = (Array.new(elements.size {result.pop})).flatten
    render json: {
        data: result
    }

Но он все еще не работает, процесс все еще продолжается даже после истечения времени ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...