Osobne si nemyslim, ze s tymto nieco urobis, kedze Python urcite pouziva systemovy DNS resolver.
>-----Pôvodná správa----- >Od: David [mailto:[email protected]] >Komu: [email protected] >Predmet: [python] Problém s blokujícím urlopen > > >Zdravím, > >snad mi poradí někdo tady. > >V jedné aplikaci stahuji soubor přes http pomocí urlopen z modulu >urllib2. Konkrétně se jedná o textový soubor s údaji o počasí, ale >problém se týká obecně jakéhokoliv uri. > >Funkce urlopen přijímá v parametru timeout časový limit pro navázání >spojení, který ale zřejmě ignoruje když je nedostupná DNS. >Následující kód by měl skončit po cca 3 sekundách při neúspěšném >spojení, ale zasekne se a skončí asi až po minutě. > >import urllib2 >url = 'http://weather.noaa.gov/pub/data/observations/metar/stations/ >LKPR.TXT' >try: >data = urllib2.urlopen(url, timeout=3) >except: >print 'Failed to retrieve a data !' > >V případě navazování spojení na nameserver skript dokonce nereaguje >ani na signál SIGALRM. >Následující kód by měl vyvolat výjimku po 3 sekundách, ale také >zůstane viset na 20x delší dobu: > >import urllib2, signal > >def sig_handler(num,frame): >raise Exception('Failed to retrieve a data !') > >try: >signal.signal(signal.SIGALRM, sig_handler) >signal.alarm(3) >data = urllib2.urlopen('http://weather.noaa.gov/pub/data/ >observations/metar/stations/LKPR.TXT') >except Exception as excpt_dsc: >print str(excpt_dsc) > >Zkoušel jsem i nastavit socket.setdefaulttimeout, ale taky bez efektu. > >Podmínkou je, že síťové rozhraní musí být nakonfigurované a aktivní, >ale nesmí být dostupný žádný z nakonfigurovaných DNS serverů. Tohle se >stává dost často u mobilních notebooků, než se nebo pokud vůbec podaří >překonfigurovat síť na novém místě. Aplikace po tu dobu vůbec >nereaguje. > >Python 2.6.4, Linux 2.6.33, glibc 2.11.1 > >Předem díky za nakopnutí správným směrem. > >David >_______________________________________________ >Python mailing list >[email protected] >http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
