Почему некоторые идентичные запросы POST занимают в два или три раза больше времени, чем другие? - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу отправить десятки запросов POST, каждый из которых разделен на 50 мс.Все запросы идентичны.Они занимают около 315 мс (время отправки + задержка), но по одной причине я игнорирую один запрос из четырех (в среднем) занимает в два-три раза больше времени (см. Диаграмму временной шкалы Чарльза Прокси ниже).

Может кто-нибудь объяснитьмне почему?Это из-за плохой реализации многопоточности (см. Код ниже)?

import thread
import time
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

url = XXX
req_data = XXX

session = requests.Session()
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
session.cookies.clear()

def send_request(url, data):
    r = session.post(url, verify=False, data=data)

for i in range(20):
    time.sleep(0.050)
    thread.start_new_thread( send_request, (url, req_data,) )

Charles Request Timeline

Легенда из документации Чарльза:

Каждый столбец на графике разделен на три сегмента:

  • Запрос - время, потраченное на отправку (загрузку) запроса (темно-синий)
  • Латентность - времяпотратил время ожидания сетевой задержки или время обработки на сервере (средний синий цвет)
  • Response - время, потраченное на получение (загрузку) ответа (светло-синий)

EDIT:

Я проанализировал соединения через Wireshark, и ниже приведен пример запроса ~ 300 мс и запроса ~ 800 мс.

Кажетсячто 800 мс имеет два ACK-пакета больше, чем 300 мс.Кто-нибудь понимает, что происходит и что отличается между этими двумя запросами?

300 мс запрос 300ms

800 мс запрос 800ms

1 Ответ

0 голосов
/ 02 декабря 2018

Анализ пакетов с помощью Wireshark (см. Редактирование в основном посте) показывает, что разрыв в 500 мс между двумя запросами (коротким и длинным) происходит из пакета ACK во время обмена ключами SSL.

Напоминаем, что все мои запросы проходили через прокси-сервер Charles Web Proxy.

После некоторых испытаний кажется, что проблема заключается в проверке SSL с помощью Charles (который иногда добавляет 500 мс к времени загрузки запроса).

У запросов есть эквивалентное и регулярное время отправки в следующих случаях:

  • Когда я не использую прокси-сервер Charles
  • Когда я использую прокси-сервер Чарльза, но вместо «https» («SSL») я иду через «http» ( здесь мое решение сохраняется, потому что нет конфиденциальных данных ).

Спасибо за вашу помощь, ребята:)

Этот ответ показывает связь между SSL-сертификацией Charles Web Proxy и проблемой, но не объясняет ее в полной мере.

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