urllib2.urlopen timeout
Ben Charrow
bcharrow at csail.mit.edu
Mon Aug 3 14:26:38 EDT 2009
Zdenek Maxa wrote:
> Hi,
>
> I would like to ask how I should set timeout for a call:
>
> f = urllib2.urlopen(url)
>
<snip>
>
> I know that Python 2.6 offers
> urllib2.urlopen(url[, data][, timeout])
> which would elegantly solved my problem, but I have to stick to Python 2.5.
>
There are three solutions that I know about:
1) Make your own little HTTP library and set timeouts for each of your sockets.
2) The same as the above, except use asynchronous sockets and the the select
module.
3) If you're on a Unix style system, use the signal module (the example is
helpful http://docs.python.org/library/signal.html#example)
Here's some code:
import urllib2
import signal
class TimeoutException(Exception):
"""SIGALARM was sent to the process"""
pass
def raise_timeout(signum, frame):
raise TimeoutException("Timeout!")
signal.signal(signal.SIGALRM, raise_timeout)
try:
signal.alarm(5) # raise alarm in 5 seconds
data = urllib2.urlopen("http://www.google.com").readlines()
except TimeoutException, ex:
data = None
finally:
signal.alarm(0) # disable alarm
HTH,
Ben
More information about the Python-list
mailing list