IPython Notebookでタスクの完了を監視する

シンプルだが便利なツールを共有したいと思います。 多くのデータを処理する場合、「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つの小さな問題があります。
  1. これはいです。 明らかに。
  2. バッファが爆発する場合があります。

  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へのリンクです



All Articles