長時間実行され、多数 (たとえば 1,000,000) の反復を実行する C++ プログラムがあります。通常、Python (通常は Jupyter Notebook) から実行します。C++ プログラムの進捗状況を確認したいと思います。便利な方法はありますか?おそらく、tqdm などの Python プログレス バー ライブラリにリンクするには?
1 に答える
免責事項、私は tqdm の共同開発者です。
私は3つの解決策を見ます:
行列の各行を処理した後 (pandas のように) のように、cpp lib が定期的に Python にコールバックし、他の一般的な Python ループと同様に、tqdm のような Python プログレス バーを使用できます。ループは反復ごとに更新されるのではなく、コールバックごとに更新されるため、実際にはリアルタイムではありませんが、cpp ライブラリが高速であれば、何も気付かないでしょう。たとえば、サブモジュール tqdm_pandas を参照してください。これはまったく同じように機能します。
cpp lib が最後までコールバックなしですべての作業を行うか (これによりパフォーマンスが最大化され、Python へのコールバックは非常に遅くなります)、次に cpp lib 内で cpp プログレス バーを使用する必要があります。最後まで呼び出されることはありません)。開発中の tqdmの公式 cpp ポートがあり、これはニーズに合うかもしれません。
最後のケースは、cpp プログラムがリンクされたライブラリではなく、コマンドラインから実行できるスタンドアロン プログラムである場合です。この場合、cpp プログラムが何かを出力できる限り、tqdm にはそのようなプログラムとのインターフェース機能があります。それについての readme を参照してください。gzip やその他の commin Unix コマンドでは既にうまく機能しています。