Python: request.session - как убедиться, что я закрываю TCP-соединение в Python 2.7.9? - PullRequest
0 голосов
/ 30 августа 2018
  • Python 2.7.9
  • запросы 2.17.3

Мы видим, что когда мы вызываем это из нескольких потоков (мы запускаем от двух до восьми потоков одновременно):

    with requests.Session() as s:
        s.put((apiserverUrl + str(id_num) + '/'), headers=headers,
                       auth=auth, data=jsonPayload)

Иногда клиентский сокет недоступен и происходит сбой при ошибке winsock 10048.

В некоторых документах, которые я просмотрел, кажется, что request.Session () self закрывается, а в других местах это указывает, что он остается открытым в течение некоторого времени ожидания по умолчанию.

Как правильно закрыть сокет после каждого запроса?

1 Ответ

0 голосов
/ 07 сентября 2018

Requests библиотека опирается на urllib3 для базового соединения HTTP

И по умолчанию urllib3 поддерживает TCP-соединение живым.

Есть несколько способов указать иное. Я предпочитаю включать заголовок 'Connection':'close':

with requests.Session() as s:
    s.put((apiserverUrl + str(id_num) + '/'), headers={'Connection':'close'},
                   auth=auth, data=jsonPayload)

(больше вариантов ответа: Python-запросы закрывают http-соединение )

...