Введение
Я помню времена, когда мы запускали программу на Python, включающую большие циклы. Часто это занимает много времени, и мы не знаем, что происходит в цикле, и нет ли какой-нибудь ошибки, из-за которой он вообще не завершится. Для таких случаев мы можем использовать очень простой и полезный инструмент для просмотра хода выполнения наших процессов на python.
До сих пор, если мы делали цикл и хотели увидеть процесс этого цикла, нам приходилось делать “print”, чтобы получить информацию о состоянии процесса. В большинстве случаев мы объявляем переменную-счетчик, обновляем ее на каждой итерации и выводим на печать.
Этот подход можно заменить другим, который входит в пакет PyPrind.
PyPrind (Python Progress Indicator) предоставляет нам индикатор прогресса, который показывает процент выполнения программы (или цикла), а значит, делает процесс наглядным для пользователя.
Установка PyPrind
Установить его можно с помощью инструмента pip или с помощью conda:
pip install pyprind conda install pyprind
Пример использования PyPrind
Для того чтобы использовать его, необходимо выполнить импорт.
Затем мы объявляем прогресс-бар, указывая количество шагов, которые будут у него.
После объявления бара мы можем обновить каждый из шагов с помощью функции update.
import pyprind
n = 1000000
bar = pyprind.ProgBar(n)
for i in range(n):
bar.update()
Code language: JavaScript (javascript)
Как вы можете видеть в предыдущем примере, бар будет делать один шаг для каждого из обновлений, которые мы делаем.
В консоли вы можете увидеть следующее:
python progess.py
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:02
Code language: PHP (php)
Помимо прогресс-бара, есть возможность показать процент.
Это делается с помощью функции “ProgPercent” следующим образом:
import pyprind
n = 1000000
bar = pyprind.ProgPercent(n)
for i in range(n):
bar.update()
Code language: JavaScript (javascript)
python progress.py [100 %] Time elapsed: 00:00:02 | ETA: 00:00:00 Total time elapsed: 00:00:02
Опции
Ниже перечислены параметры, которые можно задать:
ProgBar:
- iterations (int): количество итераций, необходимых для завершения бара.
- track_time (bool, по умолчанию=True): Вывод времени, используемого при завершении цикла.
- width (int, по умолчанию=30): Указывает ширину полосы в символах. (Только для случая ProgBar)
- stream (int, по умолчанию=2): Указывает, куда выводится текст. 1′ для stdout, ‘2’ для stderr.
- title (str): Определяет заголовок, который отображается в строке.
- monitor (bool, default=’False’): мониторинг использования процессора и памяти, если установлено значение True (требуется пакет ‘psutil’).
- bar_char(char): Определяет тип символа, заполняющего индикатор выполнения.
Полный пример со всеми этими параметрами будет выглядеть так:
import pyprind
import time
n = 1000000
bar = pyprind.ProgBar(n
, track_time=True
, width= 40
, stream=2
, title='Мой первый цикл'
, monitor=False
, bar_char='¦'
)
for i in range(n):
bar.update()
print(bar)
Code language: PHP (php)
результат:
python progress.py Мой первый цикл 0% [¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦] 100% | ETA: 00:00:00 Total time elapsed: 00:00:02 Title: Мой первый цикл Started: 10/24/2019 10:42:00 Finished: 10/24/2019 10:42:03 Total time elapsed: 00:00:02 CPU %: 100.00 Memory %: 0.07
Заключение
Этот инструмент показывает нам в виде полосы прогресс циклов или программы в целом в более наглядной форме.
С первого взгляда мы можем получить представление о текущем прогрессе и о том, много или мало осталось до завершения цикла.
Это очень полезно в случае очень длинных циклов или затратных процессов, так как показывает нам его текущее состояние или если он завис.
Это простой и удобный в использовании инструмент, хотя необходимо быть осторожным с настройкой, так как количество итераций бара должно быть точно равно количеству шагов цикла.