Ruby в Python Virtualenv HTTP Post Request очень медленно на стороне клиента
В настоящее время я застрял с проблемой времени отклика с библиотекой HTTP Фарадея. Я использую следующий код для инициализации запроса POST к серверу, работающему на моей локальной машине 127.0.0.1. Сервер возвращает допустимую строку JSON. Код для инициализации объекта Фарадея на стороне клиента выглядит следующим образом:
url = 'http://127.0.0.1'
conn = Faraday.new(:url => url) do |faraday|
faraday.request :url_encoded
faraday.response :json, :content_type => 'application/json'
faraday.adapter Faraday.default_adapter
end
Затем я отправляю строку JSON через запрос POST на сервер. Код для отправки запроса выглядит следующим образом (размер текста до 5000 символов):
payload = {:language => 'en', :text => 'some text'}.to_json
response = conn.post do |req|
req.url '/api'
req.headers['Content-Type'] = 'application/json'
req.body = payload
end
Ожидаемый результат - строка JSON следующей структуры:
{
"level1.1" : [
{
"level2.1" : [
{
"value1" : "Text",
"value2" : "Text",
"value(...)" : "Text",
"value(n)" : "Text"
},
{...
}
],
<and so on... - of course in a valid JSON structure ending>
Когда я запускаю код, ничего не делая с результатом, он работает довольно хорошо и заканчивается за разумное время (< 0.5 с). Но как только я пытаюсь получить доступ к объекту ответа, сценарий становится ужасно медленным.
Просто добавив строку:
p response.body
Время обработки достигает> 8 с.
Я проверил ответ сервера с почтальоном, и он работает абсолютно нормально, без каких-либо видимых проблем. Время отклика в Почтальоне также>0,5 с. Замедление появляется только на стороне клиента, когда я пытаюсь получить доступ к объекту ответа. Простая проверка объекта ответа также не влияет на время обработки. Но как только я начинаю "делать" что-то с ответом, оно становится ужасно медленным.
Я использую Ruby 2.5.3 и Faraday 0.15.4 / Middleware 0.12.2
Любая идея, которая может вызвать это замедление, очень ценится.
Крид
РЕДАКТИРОВАТЬ
Несмотря на мой комментарий, что HTTParty решил эту проблему, это было просто из-за меньшей полезной нагрузки. HTTParty и Faraday оба плохо работают на моем POST-запросе, в то время как POST-запрос от Postman выполняется очень быстро даже при больших нагрузках. Я понятия не имею, что вызывает такое различное поведение во время выполнения при запросе абсолютно одного и того же серверного приложения с одинаковой полезной нагрузкой.
Как уже говорилось, любые идеи, которые могли бы указать мне правильное направление, очень ценятся.
Крид
1 ответ
... после поиска решения в течение нескольких дней я наконец нашел проблему. Если у вас есть Python и Ruby-код, объединенный в папке, которая связана с Python virtualenv (и, конечно, с активированным Python env), у Ruby, очевидно, возникают проблемы с разрешением локального адресного пространства. Это работает, но требуется несколько странных обходных путей, которые делают все это ужасно медленным.
Мое решение: я переместил код Ruby, который должен проигрываться вместе с кодом Python через HTTP-соединения, в папку вне папки с кодом Python.