私は大gzipファイルを処理しようとしているこれら二つのstackoverflowの質問からurllib2のとZLIBと技術を使用して、Pythonで、インターネットから引き込ま:のpython + 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
編集: これは、NOT urllib2の/ zlibのハンドリングで、プログラムのどこかのバグであることが判明しました。助けてくれた皆様に感謝します。大きなgzipファイルを処理する必要がある場合は、上記のコードで使用しているパターンをお勧めします。
長い操作を 's'に置くと同じことが起こりますか? – chown
はい、結果は同じです。 – beerbajay
他の操作をtime.sleep(2)に置き換えるとどうなりますか? –