Timeout für urllib2.urlopen () in vor Python 2.6-Versionen
Den urllib2 Dokumentation sagt, dass timeout parameter wurde Hinzugefügt, die in Python 2.6. Leider ist mein code-Basis hat, läuft schon auf Python 2.5 und 2.4-Plattformen.
Gibt es eine Alternative Möglichkeit zur Simulation der timeout? Alles was ich tun möchte ist ermöglichen, den code zu sprechen, den remote-server für eine bestimmte Zeit.
Vielleicht eine alternative gebaut-in-Bibliotheken? (Will nicht installieren 3rd-party, wie pycurl)
InformationsquelleAutor der Frage rubayeet | 2010-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie ein globales Zeitlimit für alle socket-Operationen (einschließlich der HTTP-requests) durch den Einsatz von:
socket.setdefaulttimeout()
wie diese:
in diesem Fall, Ihre urllib2 Anfrage-timeout nach 30 Sekunden, und werfen eine socket-exception. (dies wurde in Python 2.3)
InformationsquelleAutor der Antwort Corey Goldberg
Mit erheblichen Irritationen, können Sie das überschreiben der httplib.HTTPConnection-Klasse, die urllib2.HTTPHandler verwendet.
InformationsquelleAutor der Antwort Philip Z
Ich denke, Ihre beste Wahl ist, um den patch (oder bereitstellen einer lokalen version) Ihre urllib2 mit der Wechsel von der 2.6 Wartung Zweig
Die Datei sollte im
/usr/lib/python2.4/urllib2.py
(unter linux 2.4)InformationsquelleAutor der Antwort Kimvais
Benutze ich httplib aus der standard-Bibliothek. Es hat eine tote einfache API, aber nur mit http als Sie vielleicht erraten. IIUC das urllib verwendet httplib zu implementieren, die http-Sachen.
InformationsquelleAutor der Antwort Kris Walker
Müssen Sie set timeout an zwei stellen.
InformationsquelleAutor der Antwort Daniel Magnusson
Gut, der Weg timeout-Handling ist entweder 2.4 oder 2.6 ist die gleiche. Wenn Sie öffnen Sie die urllib2.py Datei in 2.6 u sehen würde, es braucht ein zusätzliches argument als timeout und verarbeitet es mit Hilfe der socket.defaulttimeout () - Methode wie bereits erwähnt ist Antwort 1.
So dass Sie wirklich brauchen nicht aktualisieren Sie Ihre urllib2.py in diesem Fall.
InformationsquelleAutor der Antwort Konark Modi