2016-09-23 3 views
1

У меня есть программа на C++, которая работает в течение длительного времени и выполняет партии (например, 1 000 000) итераций. Обычно я запускаю его из Python (обычно Jupyter Notebook). Я хотел бы увидеть прогресс от программы на C++. Есть ли удобный способ сделать это? Возможно, чтобы связать его с библиотекой баров прогресса Pythonic, например. tqdm?Показать прогресс в Python из основного процесса C++

+0

Ноутбуки - это не лучший вариант для длинных сценариев. Рассмотрите возможность использования командной строки для вызова сценария. При этом вы можете распечатать обновления статуса с C++. В качестве альтернативы, создайте и обновите файл C++ для файла вывода –

+1

Если вы можете открыть функцию, которая запускает заданное количество итераций (поэтому она принимает> 0,1 с), вы можете получить цикл в Python, который вызывает это и обновляет индикатор выполнения. Вы не хотите, чтобы он возвращался на Python на каждой итерации, потому что это добавит справедливый бит накладных расходов. –

ответ

1

Отказ от ответственности, я разработчик кода tqdm.

Я вижу 3 решения:

  • Либо касты Lib регулярно перезванивает питон, как после обработки каждой строки матрицы (как панд делает), а затем вы можете использовать индикатор Python как tqdm, как и для любого другого общего цикла питона. Цикл не будет обновляться на каждой итерации, но при каждом обратном вызове, поэтому это не реально в режиме реального времени, но если cpp lib работает быстро, вы ничего не заметите. См., Например, подмодуль tqdm_pandas, он работает именно так.

  • Либо cpp lib выполняет всю работу без какого-либо обратного вызова до конца (это максимизирует производительность, обратные вызовы на Python - огромные замедления), тогда вам нужно использовать индикатор выполнения cpp внутри вашей cpp lib, поскольку вы не можете использовать python one (так как он никогда не будет вызываться до конца). В разработке находится official cpp port of tqdm, это может подойти вашим потребностям.

  • Последний случай, если ваша программа cpp не является связанной библиотекой, а является автономной программой, которая может быть запущена из командной строки. В этом случае tqdm имеет возможности взаимодействовать с такими программами, пока ваша программа cpp может выводить что-то. См. Readme об этом, он хорошо работает для gzipping и других команд Unix Commin.