небуферизованный urllib2.urlopen - PullRequest
1 голос
/ 08 октября 2010

У меня есть клиент для веб-интерфейса для длительного процесса. Я хотел бы, чтобы вывод этого процесса отображался по мере поступления. Отлично работает с urllib.urlopen(), но не имеет параметра timeout. С другой стороны, с urllib2.urlopen() выход буферизуется. Есть ли простой способ отключить этот буфер?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2013

urllib2 буферизируется, когда вы просто звоните read()

Вы можете определить размер для чтения и, следовательно, отключить буферизацию.

например:

import urllib2

CHUNKSIZE = 80

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

это напечатало бы ответ после чтения каждого чанка из сокета, а не буфера, пока не получен весь ответ.

0 голосов
/ 08 октября 2010

Быстрый взлом, который произошел со мной, это использование urllib.urlopen() с threading.Timer() для эмуляции тайм-аута.Но это только быстрый и грязный хак.

...