urllibからのhttp応答があります
response = urllib2.urlopen('http://python.org/')
seek()
最終的には、応答の範囲内で(少なくとも最初まで)できるようにしたいと思います。だから私はこのようなコードを持つことができるようにしたいと思います:
print result.readline()
result.seek(0)
print result.readline()
この問題の最も簡単な解決策はStringIO
、io.BytesIO
次のとおりです。
result = io.BytesIO(response.read())
ただし、要求したいリソースは非常に大きくなる傾向があり、ダウンロード全体が完了する前にそれらのリソースで作業を開始したい(解析...)ということです。response.read()
ブロッキングしています。ノンブロッキングソリューションを探しています。
理想的なコードはread(BUFFER_SIZE)
リソースからのものであり、より多くのコンテンツが必要な場合はいつでも、応答からより多くを要求するだけです。私は基本的にそれを行うことができるラッパークラスを探しています。ああ、オブジェクトのようなファイルが必要です。
私は次のようなものを書くことができると思いました:
base = io.BufferedIOBase(response)
result = io.BufferedReader(base)
ただし、これは機能しないことが判明し、ioモジュールとは異なるクラスを試しましたが、機能させることができませんでした。目的の動作をするラッパークラスに満足しています。