def log_progress(sequence, every=10): for index, item in enumerate(sequence): if index % every == 0: print >>sys.stderr, index, yield item
この機能は美しいものであり、1年以上、タスクからタスクへとさまよいました。 しかし最近、標準のJupyterパッケージにIntProgressウィジェットがあることに気付き、何かを変更する時が来たことに気付きました。
stderrへのログインには、3つの小さな問題があります。
- これはいです。 明らかに。
- バッファが爆発する場合があります。
- 誰かがstderrまたはstdoutに書き込むこともあります。
データを扱う多くの人々と同様に、私はJupyterのファンです。 私はほとんどの時間をそこで過ごします。 したがって、他の環境と互換性のない次のソリューションを購入できます。
def log_progress(sequence, every=10): from ipywidgets import IntProgress from IPython.display import display progress = IntProgress(min=0, max=len(sequence), value=0) display(progress) for index, record in enumerate(sequence): if index % every == 0: progress.value = index yield record
すべてが同じで、カウンターだけが標準エラー出力ではなく、特別なウィジェットに表示されます。 非常にシンプルで便利。 Jupyterにも夢中になっている人のために、私はgithub github.com/alexanderkuk/log-progressにわずかに改善されたバージョンを投稿しました。 モジュールはコピーアンドペーストで配布されます。 健康に使用してください。
改良版では、ストリップに加えてカウンターが表示されます。 また、操作が正常に完了したかどうかによって色が変わります。
イテレータをサポートします:
当然、1つのセルにいくつかの進行状況バーがあります。
そして、それらは異なるスレッドからも動作できます:
要するに、コードgithub.com/alexanderkuk/log-progressへのリンクです 。