urllib2.urlopen sin búfer
Pregunta
Tengo cliente para la interfaz web para proceso de larga duración. Me gustaría tener la salida de ese proceso que se mostrará como viene. Funciona muy bien con urllib.urlopen()
, pero no tiene por qué parámetro timeout
. Por otro lado, con la salida urllib2.urlopen()
es amortiguada. ¿Hay una manera fácil de desactivar ese búfer?
Solución
Un truco rápido que se me ha ocurrido es utilizar urllib.urlopen()
con threading.Timer()
al tiempo de espera emular. Pero eso es sólo rápido y truco sucio.
Otros consejos
urllib2
se amortigua cuando se acaba de llamar read()
se podría definir un tamaño de búfer para leer y, por tanto, desactivar.
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 sería imprimir la respuesta después de cada trozo se lee de la toma, no tampón hasta que se reciba la respuesta completa.