2010-10-08 5 views
1

J'ai un client pour l'interface web à long processus en cours. J'aimerais que la sortie de ce processus soit affichée comme elle vient. Fonctionne très bien avec urllib.urlopen(), mais n'a pas de paramètre timeout. D'un autre côté, avec urllib2.urlopen(), la sortie est mise en mémoire tampon. Y at-il un moyen facile de désactiver ce tampon?unbuffered urllib2.urlopen

+0

Question très similaire à http://stackoverflow.com/questions/107705/python-output-buffering – synthesizerpatel

+1

@synthesizerpatel: bien, urlopen() renvoie un objet avec une interface de type fichier, mais ce n'est pas un fichier. – vartec

Répondre

0

Un hack rapide qui s'est produit à moi est d'utiliser urllib.urlopen() avec threading.Timer() pour émuler le délai. Mais ce n'est que bidouille rapide et sale.

0

urllib2 est tamponnées lorsque vous appelez juste read()

vous pouvez définir une taille à lire et donc désactiver mise en mémoire tampon.

par exemple:

import urllib2 

CHUNKSIZE = 80 

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

ce serait imprimer la réponse après chaque morceau est lu à partir de la douille, jusqu'à ce que le tampon ne toute la réponse est reçue.

Questions connexes