Почему время ожидания запросов PUT истекает, а запросы GET — нетPython

Программы на Python
Ответить
Anonymous
 Почему время ожидания запросов PUT истекает, а запросы GET — нет

Сообщение Anonymous »

При использовании библиотеки запросов Python и указании тайм-аута время ожидания GET-запросов не истекает, если общее время обработки запросов превышает время ожидания, в отличие от запросов PUT.
версия Python: 3.8.10
запрашивает версию: 2.32.3
пример кода:

Код: Выделить всё

start = datetime.now()
requests.get(URL_WITH_1GB_FILE, params=None, headers={"User-Agent": "Mozilla/5.0"}, timeout=(1,1), verify=cert)
print(f"GET: {datetime.now()-start}")
хотя выполнение всего запроса занимает более 60 секунд, мы не получаем тайм-аут. Я считаю, что это ожидаемое поведение, поскольку отдельные пакеты принимаются в течение тайм-аута 1 с.
Однако при попытке выполнить ту же операцию с запросом PUT время ожидания запроса истекает, если только время ожидания соединения превышает время, необходимое для завершения всего запроса PUT.
пример кода:

Код: Выделить всё

with open(PATH_TO_1GB_FILE ,"rb" ) as f:
dat = f.read()
timeouts = (100, 1) # connect, read
start = datetime.now()
requests.put(f"{local}/puttest", params=None, headers={"User-Agent": "Mozilla/5.0"}, timeout=timeouts, data=dat, verify=cert)
print(f"PUT: {datetime.now()-start}")
при тайм-ауте подключения 100 секунд это удается, поскольку загрузка занимает около 60 секунд, однако если для тайм-аута подключения установлено значение 10 секунд, загрузка не удалась.
Я загружаю файлы размером 100 МБ при подключении со скоростью 1 Мбит/с, для чего потребуется тайм-аут в 13 минут, однако я хочу, чтобы тайм-аут сработал намного раньше, если соединение с Интернетом прервется.
Я знаю, что могу этого добиться. отправляя меньшие фрагменты вместо полного файла размером 100 МБ, но было любопытно, есть ли способ, чтобы таймауты лучше справлялись с этой ситуацией.

Подробнее здесь: https://stackoverflow.com/questions/792 ... uests-dont
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»