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
1
A
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.
Question très similaire à http://stackoverflow.com/questions/107705/python-output-buffering – synthesizerpatel
@synthesizerpatel: bien, urlopen() renvoie un objet avec une interface de type fichier, mais ce n'est pas un fichier. – vartec