Vlakno nevies ukoncit 'natvrdo', musi sa ukoncit samo (a kedze je zblokovane, tak to bohuzial neurobi).
>-----Pôvodná správa----- >Od: Juda Kaleta [mailto:[email protected]] >Komu: Konference PyCZ <[email protected]> >Predmet: Re: [python] Problém s blokujícím urlopen > > >Nápad - co hodit to získávání dat do nějakého vlákna a pokud se nestihne >do tří sekund samo zakončit, prostě ho ukončit natvrdo? > >Yetty > > > >> 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 _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
