1

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

4

1 回答 1

2

免责声明,我是 tqdm 的共同开发者。

我看到 3 个解决方案:

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

  • 要么 cpp 库在没有任何回调的情况下完成所有工作,直到结束(这最大限度地提高了性能,对 Python 的回调是巨大的减速),那么你需要在你的 cpp 库中使用一个 cpp 进度条,因为你不能使用一个 python(因为它永远不会被调用,直到结束)。tqdm的官方 cpp 端口正在开发中,这可能符合您的需求。

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

于 2016-09-30T13:56:05.097 回答