OVH Cloud OVH Cloud

timeout pour urllib2.urlopen()

1 réponse
Avatar
J.Pierre Pourrez
Bonjour,

J'utilise le module urllib2 et sa fonction urlopen() pour récupérer
quelques pages HTML sur Internet.
Hélas, parfois le serveur que j'interroge est injoignable et mon appli se
bloque sur cette attente sans générer d'exception.

Existe un timeout qui me permettrait de déclencher une exception lorsque
un délai d'attente est dépassé ?

Un 'pydoc urllib2' ne me dit rien sur le sujet :-(

D'avance merci
Jean-Pierre

1 réponse

Avatar
Adrien Di Mascio
Bonjour,


Le Mon, 14 Feb 2005 16:31:33 +0100, J.Pierre Pourrez a écrit :

J'utilise le module urllib2 et sa fonction urlopen() pour récupérer
quelques pages HTML sur Internet.
Existe un timeout qui me permettrait de déclencher une exception lorsque
un délai d'attente est dépassé ?


Sans être un spécialiste, ceci devrait fonctionner :
import socket
import urllib2
help(socket.setdefaulttimeout)

socket.setdefaulttimeout(2)
urllib2.urlopen('http://foobar.org')
Traceback (most recent call last):



File "<stdin>", line 1, in ?
File "/usr/lib/python2.3/urllib2.py", line 129, in urlopen
return _opener.open(url, data)
File "/usr/lib/python2.3/urllib2.py", line 326, in open
'_open', req)
File "/usr/lib/python2.3/urllib2.py", line 306, in _call_chain
result = func(*args)
File "/usr/lib/python2.3/urllib2.py", line 901, in http_open
return self.do_open(httplib.HTTP, req)
File "/usr/lib/python2.3/urllib2.py", line 890, in do_open
code, msg, hdrs = h.getreply()
File "/usr/lib/python2.3/httplib.py", line 1052, in getreply
response = self._conn.getresponse()
File "/usr/lib/python2.3/httplib.py", line 781, in getresponse
response.begin()
File "/usr/lib/python2.3/httplib.py", line 273, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.3/httplib.py", line 231, in _read_status
line = self.fp.readline()
File "/usr/lib/python2.3/socket.py", line 323, in readline
data = recv(1)
socket.timeout: timed out





Il existe aussi, de mémoire (parce que c'est quand même une question
fréquemment posée), un module timeoutsocket.py qque part sur le web ...

En espérant que ça aide,
Cordialement,
Adrien.

--
Adrien Di Mascio
LOGILAB, Paris (France).
http://www.logilab.com http://www.logilab.fr http://www.logilab.org