2017-01-15 4 views
1

urllib/urllib2でダウンロード速度制限を実装したいと思います。基本的な考え方は、過去x秒間にどれだけダウンロードされたかを調べ、それが限界を超えている場合、スクリプトは単にしばらくの間スリープ状態になります。Python - urllibとurllib2 - 読んでいないとどうなりますか?

ここで、開いている接続(urlopen())がありますが、しばらくの間read()関数を呼び出さないとどうなりますか?

  1. urllibは内蔵バッファバッファがいっぱい、あなたがread()を呼び出すたびになるまで、バッファがnバイトで減少し、ダウンロードが続行されているダウンロード(及び明らかにそれが一杯になった場合、urllibはの待機を)持っています?
  2. urllibバッファがある場合、そのサイズはどれくらい大きく、1つは手動でサイズを設定できますか?
  3. バッファがない場合、urllibは単にダウンロードし続けますか?
  4. urllibとurllib2の違いはありますか?read()機能は同じですか?

答えて

0

urllibまたはurllib2の代わりにrequestsという優れたライブラリを使用することを心からお勧めします。

他の人々が転送レート制限を実施した方法については、hereおよびhereを参照してください。

+0

ありがとうございます、私はあなたが送信したリクエストとリンクを見ました。しかし要求があっても、request.iter_content(1024)がしばらく呼び出されていない場合や、要求がダウンロードや一時停止を続ける場合に何が起こるかは疑問です。 – goocreations

+1

'要求'ストリーミングを使用すると、次のチャンクを求めるまでダウンロードが一時停止すると思います。私がそう思った理由は、一度このトリックを使って大規模なダウンロードが使用していたメモリの量を制限したからです。 'requests.get'の呼び出しで' stream = True'を設定すると、すべてのデータが消費されるか、自分で閉じられるまで、接続はプールに返されません。この[guide](http://docs.python-requests.org/ja/latest/user/advanced/#body-content-workflow)が役立つかどうかを確認してください。そして、 'チャンクがNoneではないなら、#do stuff' - ' None'であるチャンクはちょうどキープアライブであることを忘れないでください。 – rtkaleta

+0

更新いただきありがとうございます。ネットワーク分析を行い、スクリプトがどれだけのデータを消費しているかを確認し、リクエストが実際に一時停止するようにします。 – goocreations

関連する問題