nikkie-ftnextの日記

イベントレポートや読書メモを発信

tqdmでダウンロードのプログレスバー(requests, HTTPX, urllib)

はじめに

七尾百合子さん、お誕生日 63日目 おめでとうございます! nikkieです。

Devinに書いてもらったPythonコードからの学びです1

目次

requestsでダウンロードするスクリプトプログレスバーを表示

100%|████████████████████████████████████████████████████████| 41.2M/41.2M [00:06<00:00, 6.71MB/s]

for item in tqdm(iterable)のようにだけ使っていたtqdm。
withコンテキストマネージャとして使う方法を知りました。
https://github.com/tqdm/tqdm/tree/v4.67.1?tab=readme-ov-file#manual
pbar手動(manual)でupdateすることで、プログレスバーになるのです!

tqdm()のパラメタについて
https://tqdm.github.io/docs/tqdm/#tqdm-objects

  • total: HTTPレスポンスの Content-Length2 を指定(100%でダウンロード完了になりますね)
  • unit: 単位。デフォルトは"it"ですがここでは"B"を指定
  • unit_scale=True: kilo, megaのように単位を自動変換(これは便利!)

requests以外のHTTPクライアントでどうなるか、Claude 3.7 Sonnetに教えてもらいました。

HTTPXバージョン

HTTPXはrequestsのAPIとの互換性を意識していますが、streamはrequestsとは違うんですよね〜3
https://www.python-httpx.org/quickstart/#streaming-responses

標準ライブラリurllibバージョン

urllib、ストリームで扱えるんですね!(チョット私の理解が甘いかも)

終わりに

PythonでHTTP通信のダウンロード、完全理解です!
with tqdm()、HTTPレスポンスヘッダのContent-Lengthから設定。
そしてunit_scale=Trueが便利です!


  1. SpeechRecognitionのメンテナ活動からです
  2. https://developer.mozilla.org/ja/docs/Web/HTTP/Reference/Headers/Content-Length
  3. 過去記事