Python3 urllib.request не будет закрывать соединения немедленно

У меня есть следующий код для запуска непрерывного цикла для получения некоторого контента с веб-сайта:

from http.cookiejar import CookieJar from urllib import request cj = CookieJar() cp = request.HTTPCookieProcessor(cj) hh = request.HTTPHandler() opener = request.build_opener(cp, hh) while True: # build url req = request.Request(url=url) p = opener.open(req) c = p.read() # process c p.close() # check for abort condition, or continue 

Содержимое читается правильно. Но почему-то TCP-соединения не закрываются. Я наблюдаю за активным числом подключений от интерфейса маршрутизатора dd-wrt, и он постоянно растет. Если скрипт продолжает работать, он исчерпает ограничение соединения 4096 маршрутизатора. Когда это произойдет, сценарий просто войдет в состояние ожидания (маршрутизатор не разрешит новые подключения, но таймаут еще не ударил). Через пару минут эти соединения будут закрыты, и сценарий может возобновиться снова.

Я смог наблюдать состояние этих висящих соединений от маршрутизатора. Они имеют одно и то же состояние: TIME_WAIT.

Я ожидаю, что этот скрипт будет использовать не более одного TCP-соединения одновременно. Что я делаю не так?

Я использую Python 3.4.2 в Mac OS X 10.10.

One Solution collect form web for “Python3 urllib.request не будет закрывать соединения немедленно”

В ходе некоторых исследований я обнаружил причину этой проблемы: дизайн протокола TCP . В двух словах, когда вы отключитесь, соединение сразу не отбрасывается, оно переходит в состояние TIME_WAIT и истечет через 4 минуты. В отличие от того, что я ожидал, соединение сразу не исчезает.

В соответствии с этим вопросом также невозможно принудительно удалить соединение (без перезапуска сетевого стека).

Оказывается, в моем конкретном случае, как заявил этот вопрос , лучшим вариантом было бы использовать постоянное соединение, например, HTTP keep-alive. Поскольку я запрашиваю тот же сервер, это будет работать.

  • Разберите html-код для всей веб-страницы, прокрученной вниз
  • web2py url validator
  • IOError: getaddrinfo не удалось
  • Python: почтовый запрос с файлами изображений
  • Не удается "импортировать urllib.request, urllib.parse, urllib.error"
  • Асинхронно получать и хранить изображения в python
  • получение важных данных с веб-страницы с использованием python
  • Печать кода с веб-страницы с помощью python и urllib
  • Urllib и проверка сертификата сервера
  • используя python urllib, как избежать не HTML-содержимого
  • Ошибка Python 3.0 urllib.parse «Тип str не поддерживает API-интерфейс буфера»
  • Python - лучший язык программирования в мире.