我試圖處理大量gzip文件使用這兩個計算器問題的urllib2和zlib和技術從蟒蛇互聯網拉:蟒蛇+的urllib2:流過早結束
這很好,除了在讀取每個文件塊之後,我需要對結果字符串進行一些操作,這涉及到大量的分割和迭代操作。這需要一些時間,當代碼執行下一個req.read()
時,它不會返回任何內容,並且程序結束,只讀取第一個塊。
如果我註釋掉其他操作,整個文件將被讀取並解壓縮。代碼:
d = zlib.decompressobj(16+zlib.MAX_WBITS)
CHUNK = 16 * 1024
url = 'http://foo.bar/foo.gz'
req = urllib2.urlopen(url)
while True:
chunk = req.read(CHUNK)
if not chunk:
print "DONE"
break
s = d.decompress(chunk)
# ...
# lots of operations with s
# which might take a while
# but not more than 1-2 seconds
任何想法?
編輯: 原來是程序中其他地方的錯誤,而不是在urllib2/zlib處理中。感謝所有幫助過我的人。如果您需要處理大型gzip文件,我可以推薦上面代碼中使用的模式。
當您將長操作放在's'函數中時,是否會發生同樣的事情? – chown
是的,結果是一樣的。 – beerbajay
如果用time.sleep(2)替換其他操作會發生什麼? –