how to handle network failures
Diez B. Roggisch
deets at web.de
Sat Oct 9 05:31:19 EDT 2010
harryos <oswald.harry at gmail.com> writes:
> hi
> I am trying to write a DataGrabber which reads some data from given
> url..I made DataGrabber as a Thread and want to wait for some interval
> of time in case there is a network failure that prevents read().
> I am not very sure how to implement this
>
> class DataGrabber(threading.Thread):
> def __init__(self,url):
> threading.Thread.__init__(self)
> self.url=url
> def run(self):
> data=self.get_page_data()
> process_data(data)
>
> def get_page_data():
> try:
> f=urllib.urlopen(self.url)
> data=f.read(1024)
> except IOError:
> #wait for some time and try again
> time.sleep(120)
> data=self.get_page_data()
> return data
>
> Is this the way to implement the part where the thread waits and
> reads the data again? Will this handle network failures?Can somebody
> please help?
This only works if your page is always 1024 bytes long. Which I
doubt. So don't pass the 1024 to read.
Also, you need a loop to re-read the data. Like this:
for n in xrange(max_number_of_retries):
try:
f=urllib.urlopen(self.url)
data = f.read()
break # exist the loop if all
except IOError:
pass
self.process_data(data)
Diez
More information about the Python-list
mailing list