Я пишу скрипт python, проверяющий/отслеживающий состояние нескольких серверов/веб-сайтов (время отклика и тому подобное), это программа с графическим интерфейсом, и я использую отдельный поток для проверки разных серверов/веб-сайтов, а базовая структура каждого потока использует бесконечный цикл while для запроса этого сайта каждый случайный период времени (от 15 до 30 секунд), после внесения изменений на веб-сайте/сервере каждый поток запускает новый поток для тщательной проверки (запрос дополнительных страниц и тому подобного).
Проблема в том, что мое интернет-соединение всегда блокировалось/забивалось/искажалось после нескольких часов работы этого скрипта, ситуация такова, что со стороны моего скрипта у меня истекало время ожидания ошибки urlopen каждый раз, когда он запрашивает страницу, а со стороны моего браузера FireFox Я не могу открыть ни один сайт. Но странно то, что в тот момент, когда я закрываю свой скрипт, мое интернет-соединение немедленно возобновляется, что означает, что теперь я могу просматривать любой сайт через свой браузер, так что это должен быть скрипт, вызывающий все проблемы.
Я тщательно проверил программу и даже использую del
для удаления любого соединения после его использования, но все равно получаю ту же проблему. Я использую только urllib2, urllib, mechanize для выполнения сетевых запросов.
Кто-нибудь знает, почему такое происходит? Как отладить эту проблему? Есть ли инструмент или что-то для проверки состояния моей сети в случае возникновения такой ситуации? Это действительно беспокоит меня какое-то время...
Кстати я за VPN, это как-то связано с этой проблемой? Хотя я так не думаю, потому что моя сеть всегда включается после закрытия скрипта, а VPN-соединение никогда не прерывается (как кажется) в течение всего процесса.
[Обновления:]
Только что нашел больше информации об этой проблеме, когда моя программа прерывает подключение к Интернету, ну, это не совсем «отключено», я имею в виду, что я не могу открыть какой-либо сайт в своем браузере или всегда получаю сообщение об ошибке urlopen, но я все еще могу получить ответьте, используя «ping google.com» в строке cmd. И когда я вручную разорвал VPN-соединение, а затем повторно набрал, не закрывая мою программу, она снова начинает работать, и я также могу выходить в сеть через свой браузер. Почему это происходит?
response = urllib2.urlopen("http://google.com")
,del response
закроет это соединение? - person Shane   schedule 14.01.2011del response
просто удаляет локальную переменнуюresponse
, тем самым удаляя одну ссылку на объект urllib. Если это единственная ссылка на объект ответа, она будет удалена и, да, закрыта. Но это не следует делать вручную с помощьюdel
, вместо этого вы должны позволить ему выйти за рамки. Если вы не уверены, вы можете вручную вызыватьclose()
для объектов, но в этом нет необходимости. Но это не похоже на проблему с вашим приложением. - person Rosh Oxymoron   schedule 14.01.2011urlopen error timed out
. Это действительно разозлило меня - person Shane   schedule 14.01.2011del
в значительной степени бесполезен, так как вы не можете контролировать, когда или даже если соединение будет закрыто. - person Lennart Regebro   schedule 14.01.2011