Я хочу отправить десятки запросов 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,) )
Легенда из документации Чарльза:
Каждый столбец на графике разделен на три сегмента:
- Запрос - время, потраченное на отправку (загрузку) запроса (темно-синий)
- Латентность - времяпотратил время ожидания сетевой задержки или время обработки на сервере (средний синий цвет)
- Response - время, потраченное на получение (загрузку) ответа (светло-синий)
EDIT:
Я проанализировал соединения через Wireshark, и ниже приведен пример запроса ~ 300 мс и запроса ~ 800 мс.
Кажетсячто 800 мс имеет два ACK-пакета больше, чем 300 мс.Кто-нибудь понимает, что происходит и что отличается между этими двумя запросами?
300 мс запрос
800 мс запрос