Время прочтения: 3 мин.

Индикаторы для определения степени выполнения работы скрипта или отдельной функции можно выделить в класс, который называется Progress Bar.

Progress Bar реализованы практически во всех языках программирования, но на Python-е внедрить такой индикатор максимально просто.

Наиболее распространённые модули называются: tqdm, progress и alive-progress.

Для примера выполнения каких-либо действий мы будем использовать модуль time, и показывать циклом отсчитывание секунд.

Для начала подключим модуль progress и time. После этого реализуем простой отчет до 10.  Так как мы будем работать в командной строке, то используем компонент IncrementalBar модуля progress, который нам позволит отчитывать действия. Ниже представлен простой код и визуализация работы.

import time
from progress.bar import IncrementalBar

bar = IncrementalBar(`Countdown`, max = 10)

for i in range(10):
	   bar.next()
     time.sleep(1)
bar.finish()

В итоге, при работе скрипта вы видим следующее:

Алгоритм предельно прост: сначала создаем переменную, в которой указываем имя Progress Bar-а и максимальное значение, а потом каждый раз увеличиваем ее методом next() на одно значение. В конце, для получения конечной информации о работе указываем метод finish().

При этом модуль progress содержит не только IncrementalBar, но и более 15 различных вариантов визуализации.

При использовании модуля tqdm нам надо его только добавить и использовать как один из параметров цикла. При этом данный модуль имеет больше опций чем progress, доступен для использования в jupyter notebook, а также достаточно информативен.

import time
from tqdm import tqdm

for i in tqdm(range(10)):
      time.sleep(1)

Результат работы при этом следующий:

Как можно заметить, даже без каких-либо настроек tqdm показывает нам время выполнения и за сколько выполняется один цикл (что очень удобно).

Последним вариантом реализации Progress Bar, который мы рассмотрим, будет модуль alive-progress.

В самом простом исполнении он похож на tqdm, но отображает чуть больше анимации в консоли.

Для его работы надо не только использовать модуль alive_progress, но и конструкцию with as (этот вариант наиболее простой, но не обязательный). Кроме этого, во время каждой итерации цикла нам надо вызывать bar(), чтобы увеличить значение progress bar.

import time
from alive_bar(10) as bar:
        for I in range(10):
              bar()
		  time.sleep(1)

Видим, что информации стало еще больше

Данные модули имеют крайне большое и разнообразное количество функций, которые позволяют сделать работу в консоли более информативной и понятной для пользователя. А также дать нам информацию о том, как быстро работает программа, сколько еще отработать осталось, и не завис ли скрипт.