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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top