Мне нужно разработать конечную точку в рельсах, которая будет отправлять (возможно) сотни / тысячи запросов, обрабатывать их, а затем возвращать / отображать 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
}
Но он все еще не работает, процесс все еще продолжается даже после истечения времени ожидания.