从底层C ++进程显示Python的进度

时间:2016-09-23 13:13:29

标签: python subprocess progress-bar jupyter-notebook tqdm

我有一个C ++程序,它运行很长时间并执行大量(例如1,000,000)次迭代。通常我从Python(通常是Jupyter Notebook)运行它。我想看看C ++程序的进展。有方便的方法吗?也许将它链接到Pythonic进度条库,例如tqdm?

1 个答案:

答案 0 :(得分:1)

免责声明,我是tqdm的开发人员。

我看到3个解决方案:

  • cpp lib在处理矩阵的每一行之后会定期回调python(就像pandas那样)然后你可以使用像tqdm这样的Python进度条,就像任何其他常见的python循环一样。循环不会在每次迭代时更新,而是在每次回调时更新,所以它不是真正的实时,但如果cpp lib很快,你就不会注意到任何东西。例如,请参阅子模块tqdm_pandas,它的工作方式与此类似。

  • 要么cpp lib完成所有的工作而没有任何回调,直到最后(这会使性能最大化,对Python的回调是巨大的减速),那么你需要在cpp lib中使用cpp进度条,因为你不能使用python(因为它永远不会被调用直到结束)。正在开发official cpp port of tqdm,这可能符合您的需求。

  • 最后一种情况是,如果您的cpp程序不是链接库,而是可以从命令行运行的独立程序。在这种情况下,只要您的cpp程序可以输出某些内容,tqdm就可以与这些程序进行交互。请参阅有关它的自述文件,它适用于gzipping和其他commin Unix命令。