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)
это напечатало бы ответ после чтения каждого чанка из сокета, а не буфера, пока не получен весь ответ.