シンプルだが便利なツールを共有したいと思います。 多くのデータを処理する場合、「10,000個のURLをダウンロードする」、「2GBファイルを読み込む、各行で何かを行う」、「10,000個のhtmlファイルを解析してヘッダーを取得する」など、多くの場合、プリミティブで長い操作があります。 ハングした端末を長時間覗き込むのは憂慮すべきことなので、長い間、次の独創的なコードを使用しました。
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へのリンク
です 。