Python 2.6: проблема с тайм-аутом urlib2

Кажется, я не могу получитьurllib2 время ожидания должно быть принято во внимание. Я прочитал - я предполагаю - все сообщения, связанные с этой темой, и, кажется, яЯ не делаю ничего плохого. Я прав? Большое спасибо за вашу помощь.

Сценарий:

Мне нужно проверить подключение к Интернету, прежде чем продолжить с оставшимся сценарием. Затем я написал функцию (Net_Access), которая представлена ниже.

Когда я выполняю этот код при подключенном интерфейсе локальной сети или Wi-Fi и проверяя существующее имя хоста: все в порядке, так как нет ошибок или проблем, поэтому нет тайм-аута.Если я отключаю разъем локальной сети или проверяю несуществующее имя хоста, значение тайм-аута, похоже, игнорируется. Какие'не так с моим кодом, пожалуйста?

Некоторая информация:

Ubuntu 10.04.4 LTS (работает на виртуальной машине VirtualBox v4.2.6, хост-ОС - MAC OS X Lion)cat /proc/sys/kernel/osrelease: 2.6.32-42-genericPython 2.6.5

Мой код:

#!/usr/bin/env python

import socket
import urllib2

myhost = 'http://www.google.com'
timeout = 3

socket.setdefaulttimeout(timeout)
req = urllib2.Request(myhost)

try:
    handle = urllib2.urlopen(req, timeout = timeout)
except urllib2.URLError as e:
    socket.setdefaulttimeout(None)
    print ('[--- Net_Access() --- No network access')
else:
    print ('[--- Net_Access() --- Internet Access OK')

1) Работа с подключенным разъемом LAN

$ $ time ./Net_Access 
[--- Net_Access() --- Internet Access OK

real    0m0.223s
user    0m0.060s
sys 0m0.032s

2) Тайм-аут не работает, сетевой разъем отключен

$ time ./Net_Access 
[--- Net_Access() --- No network access

real    1m20.235s
user    0m0.048s
sys 0m0.060s

Добавлено в исходное сообщение: результаты теста (с использованием IP вместо FQDN)

В соответствии с предложением @unutbu (см. Комментарии) замена полного доменного имени в myhost IP-адресом устраняет проблему: время ожидания вступает в силу.

Разъем локальной сети подключен ...

$ time ./Net_Access [--- Net_Access () --- Доступ в Интернет в порядке

real    0m0.289s
user    0m0.036s
sys 0m0.040s

Разъем локальной сети отключен ...

$ time ./Net_Access [--- Net_Access () --- Нет доступа к сети

real    0m3.082s
user    0m0.052s
sys 0m0.024s

Это хорошо, но это означает, что тайм-аут может использоваться только с IP, а не FQDN. Weird ...

Кто-то нашел способ использовать тайм-аут urllib2 без разрешения до DNS и передать IP функции, или вы сначала используете сокет для проверки соединения, а затем запускаете urllib2, когда уверены, что можете достичь цели?

Большое спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос