我正在尝试使用urllib2和zlib以及来自这两个stackoverflow问题的技术处理从python中从互联网中提取的大型gzip文件:
这很好用,除了在读取每个文件块后,我需要对结果字符串进行一些操作,这涉及大量的拆分和迭代。这需要一些时间,当代码进行下一个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文件,我可以推荐上面代码中使用的模式。
答案 0 :(得分:1)
如果超时是问题,并且不清楚它是什么,你可以通过在中间插入一个队列并在从队列中读取的另一个线程中进行处理来解耦代码的输入读取和处理方。
您还可以缩小块大小,减少每个循环的处理。
答案 1 :(得分:1)
这是程序中其他地方的错误,而不是urllib2 / zlib处理中的错误。如果你需要处理大型gzip文件,我可以推荐上面代码中使用的模式。