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.

Другие вопросы по тегам