Durante il tentativo di fare una delle mie applicazioni Python un po 'più robusti in caso di interruzioni di connessione ho scoperto che chiamando la funzione di lettura di un http-stream fatta da urllib2 può bloccare la sceneggiatura per sempre.lettura di un flusso fatta da urllib2 non si riprende quando la connessione ottenuto interrotta
ho pensato che la funzione di lettura verrà timeout e infine sollevare un'eccezione, ma questo non cucitura essere il caso in cui il collegamento ottenuto interrotto durante una chiamata funzione di lettura.
Qui è il codice che causerà il problema:
import urllib2
while True:
try:
stream = urllib2.urlopen('http://www.google.de/images/nav_logo4.png')
while stream.read(): pass
print "Done"
except:
print "Error"
(Se si prova lo script è probabilmente necessario interrompere il collegamento più volte prima di raggiungere lo stato da cui lo script non recupera)
ho guardato la sceneggiatura via Winpdb e ha fatto uno screenshot dello stato da cui lo script non riprenderà mai (anche se la rete ha nuovamente disponibile).
Winpdb http://img10.imageshack.us/img10/6716/urllib2.jpg
C'è un modo per creare uno script python che continuerà a lavorare affidabile anche se la connessione di rete ottenuto interrotto? (Preferirei evitare di fare questo all'interno di un filo in più.)
+1 per una questione ben scritto –