urllib2.urlopen sin tampón

Tengo cliente para la interfaz web para el proceso de larga ejecución. Me gustaría que la salida de ese proceso se muestre tal como aparece. Funciona muy bien con urllib.urlopen() , pero no tiene un parámetro de timeout . Por otro lado, con urllib2.urlopen() la salida está en búfer. ¿Hay una manera fácil de deshabilitar ese búfer?

Un truco rápido que se me ha ocurrido es usar urllib.urlopen() con threading.Timer() para emular el tiempo de espera. Pero eso solo es rápido y sucio hack.

urllib2 se almacena en búfer cuando se llama a read()

Podría definir un tamaño para leer y, por lo tanto, deshabilitar el almacenamiento en búfer.

por ejemplo:

 import urllib2 CHUNKSIZE = 80 r = urllib2.urlopen('http://www.python.org') while True: chunk = r.read(CHUNKSIZE) if not chunk: break print(chunk) 

esto imprimirá la respuesta después de que cada fragmento se lea del socket, no el búfer hasta que se reciba la respuesta completa.