こんにちはtetsuです。
プログラムを実行しているときにfor文の処理の進捗を知りたくなるときって結構あるんじゃないかと思います。特にプログラムの実行がなかなか終了しないと「処理が進んでいないんじゃないか」、「一体この処理はいつ終わるんだ」と不安になってきますので、進捗を表示する仕組みを導入したくなります。
私の場合は普段Pythonで開発をするときにはプログレスバーの表示にtqdmというライブラリを使っています。あまり知らなかったのですが、他にもプログレスバーを表示するライブラリがあるということなので今回は簡単に各ライブラリの比較をしてみようと思います。プログレスバーの表示の設定は変更しないで利用することが多いかなと思いますので、デフォルトの挙動について見ていくことにします。
なお、以下ではPythonのバージョンは3.6.8、各ライブラリのバージョンはtqdmは4.32.1、progressbar2は3.42.0、PyPrindは2.11.2を用いています。
tqdm
tqdmを最初に紹介します。
tqdmという謎の文字列はなんだろうと思いますが、リンク先には次のように書かれています。
tqdm means “progress” in Arabic (taqadum, تقدّم) and is an abbreviation for “I love you so much” in Spanish (te quiero demasiado).
インストールは簡単で、
1 |
pip install tqdm |
のコマンドで完了です。
使い方も簡単で次のようにfor文のiteratorをtqdmで囲うだけで良いです。
1 2 3 4 5 |
import time from tqdm import tqdm for i in tqdm(range(100)): time.sleep(0.01) |
実行結果:
なおJupyter Notebook上で利用する場合にはアニメーションで表示することができます。これはtqdmのimportの部分をfrom tqdm import tqdm_notebook as tqdmとすれば良いです。実行すると次のように表示されます。
いい感じに表示されますね。
ただしJupyter Notebook上で使うときにわざわざimportの部分を書き換えるのが面倒に思えます。この問題への対応として、importの部分をfrom tqdm.autonotebook import tqdmと置き換えることで、tqdmが自動でNotebook用のアニメーションを使うかどうかの切り替えをしてくれるようになります。
progressbar2
次にprogressbar2を紹介します。
progressbarは無印のものとprogressbar2があります。どうやらprogressbar2はPython3へ対応していて、無印の方はPython2用のようです。今回はprogressbar2の方を見ていくことにします。
次のようにコマンドを実行してinstallします。
1 |
pip install progressbar2 |
使い方はtqdmと同じで次のようになります。
1 2 3 4 5 |
import time from progressbar import progressbar for i in progressbar(range(100)): time.sleep(0.01) |
実行結果:
tqdmと比べると1秒あたりの処理回数が書いてありませんが、それ以外は得られる情報はほとんど一緒かなと思います。
PyPrind
最後にPyPrindを紹介します。
次のようにコマンドを実行してinstallします。
1 |
pip install PyPrind |
使い方は他のものと同じで次のようになります。
1 2 3 4 5 |
import time from pyprind import prog_bar for i in prog_bar(range(100)): time.sleep(0.01) |
実行結果:
tqdm、progressbar2と比べると、現時点で何%終わっているのかが正確には分からないですね。
まとめ
最後にtqdmとprogressbarとpyprindの表示を並べて見比べられるようにしておきます。
tqdm:
progressbar2:
PyPrind:
みなさんはどのプログレスバーがお好みでしょうか。どれも使い方は簡単でした。私は1秒あたりの処理回数が分かり、タイピングの量が少なくて済むtqdmがいいかなと思いました。