Jupyter Lab/Notebookでoutputの定期的に表示を更新するには、clear_output()を使って以下のように書く。このコードに対して、tqdmでプログレスバーを表示させたい場合に発生する問題と解決方法について記載する。
from IPython import display
from time import sleep
for i in range(100):
print(i)
display.clear_output(wait=True)
sleep(1) # 表示速度調整のために1s止める
# 99 ※0から順番に99まで表示される。
tqdmを使ってプログレスバーを表示させたい場合の問題
先ほどのコードに対して、プログラムの進み具合を確認するために、tqdmを使ってプログレスバーを表示させようとしてもclear_output()しているため、プログレスバーも消されてしまう。このため、プログラムの進み具合を確認することができない。
from tqdm.notebook import tqdm
for i in tqdm(range(100)):
print(i)
display.clear_output(wait=True)
sleep(1) # 速度調整のために1s止める
# 99 ※tqdmも消されてしまうため、0から順番に99まで表示されだけ
解決方法
ipywidgetsのOutputを使うことで、clear_output()によって消す出力を選択することができます。
例えば、print(i)のみ消したい場合は、以下のように書く。
from ipywidgets import Output
out = Output()
display.display(out)
for i in tqdm(range(100)):
with out:
print(i)
display.clear_output(wait=True)
sleep(1) # 速度調整のために1s止める
matplotlibやseabornを使って図表を出力に表示させている場合も同様の方法で対処できる。
コメント