Что мне делать, если socket.setdefaulttimeout () не работает?

Я пишу сценарий (многопоточный) для получения содержимого с веб-сайта, а сайт не очень стабилен, поэтому время от времени возникают зависания HTTP-запрос, который даже не может быть отключен по времени socket.setdefaulttimeout () . Поскольку у меня нет контроля над этим сайтом, единственное, что я могу сделать, - это улучшить свои коды, но сейчас у меня заканчиваются идеи.

Примеры кодов:

socket.setdefaulttimeout(150)

MechBrowser = mechanize.Browser()
Header = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 (.NET CLR 3.5.30729)'}
Url = "http://example.com"
Data = "Justatest=whatever&letstry=doit"
Request = urllib2.Request(Url, Data, Header)
Response = MechBrowser.open(Request)
Response.close()

Что мне делать, чтобы принудительно завершить зависший запрос? На самом деле я хочу знать, почему socket.setdefaulttimeout (150) вообще не работает. Кто-нибудь может мне помочь?

Добавлено: (и да, проблема все еще не решена)

Хорошо, я последовал совету Томаша и изменил коды на MechBrowser.open (Request, timeout = 60) , но происходит то же самое. До сих пор у меня все еще случайным образом зависали запросы, иногда это было несколько часов, а иногда это могло быть несколько дней. Что мне теперь делать? Есть ли способ заставить эти зависшие запросы прекратить работу?

8
задан Shane 21 December 2011 в 14:34
поделиться