我试图处理大量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)替换其他操作会发生什么? –