JupyterLab は、ノートブック、コード、データのための最新のウェブベースのインタラクティブな開発環境です。その柔軟なインターフェースにより、ユーザーはデータサイエンス、科学計算、計算報道学、機械学習におけるワークフローを設定し、アレンジすることができます。モジュール式の設計により、機能の拡張や充実が可能です。
Project Jupyter のサイトより引用・翻訳
JupyterLab に限ったことではなく、Python の標準出力でも同じことなのですが、GUI を作らずに Python だけで動作確認をする時は、ほぼ間違いなく Jupyter Lab 上で作業をするので、Jupyter Lab の話題として扱いました。
時間が掛かる処理をする時、進捗を表示するのに一定の間隔でフツーに print 関数で標準出力すると何行も出力されてしまって煩わしくなります。改行せずに重ねて同じ行に進捗率を表示するだけの方法を紹介します。
下記の OS 環境で動作確認をしています。
Fedora Linux Workstation | 41 x86_64 | |
Python | 3.13.1 | |
jupyterlab | 4.3.4 |
簡単なサンプルを以下に示しました。行末から行頭に戻す「復帰コード」の \r を利用しています。
from sys import stdout import time max = 100 for i in range(max): time.sleep(0.1) stdout.write(f'\r{(i + 1.0) / max:>6.1%} 終了しました。') stdout.flush() # 最後に改行 print()
100.0% 終了しました。
このサンプルでは time.sleep(0.1) をダミーに入れていますが、そうでない場合では、Python 処理が意外と早いので、短時間に多くの出力をしてしまうと、JupyterLab は下記のようなメッセージを表示する場合があります。デフォルトでは1秒間に 1,000 までのメッセージ出力が上限のようです。
IOPub message rate exceeded. The Jupyter server will temporarily stop sending output to the client in order to avoid crashing it. To change this limit, set the config variable `--ServerApp.iopub_msg_rate_limit`. Current values: ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec) ServerApp.rate_limit_window=3.0 (secs)
参考サイト
にほんブログ村
#オープンソース
0 件のコメント:
コメントを投稿