Индикаторы выполнения в Python
Индикаторы выполнения в Python — это визуальные индикаторы, которые предоставляют информацию о ходе выполнения задачи или операции. Они полезны для длительных процессов или итераций, когда полезно показать, какой объем работы завершен и сколько еще осталось.
Индикатор выполнения обычно состоит из визуального представления, например горизонтальной полосы или текстового представления, которое динамически обновляется, отражая ход выполнения задачи. Он также включает дополнительную информацию, такую как процент завершения, расчетное оставшееся время и любые соответствующие сообщения или метки.
Ниже приведены цели, которым служат индикаторы выполнения в Python.
Визуальная обратная связь
Оценка времени
-
Пользовательский опыт
Вот несколько подходов к реализации индикаторов выполнения в Python. Давайте рассмотрим каждый подход подробно.
Использование библиотеки tqdm
Библиотека tqdm — популярный выбор для создания индикаторов выполнения в Python. Он предоставляет простой и гибкий API для создания индикаторов выполнения с минимальным количеством кода. Библиотека tqdm автоматически вычисляет и отображает ход выполнения цикла в зависимости от длины итерации. Он также предоставляет дополнительные функции, такие как прошедшее время, расчетное оставшееся время и настраиваемый внешний вид.
Чтобы использовать tqdm, нам нужно сначала установить его с помощью pip в среде Python.
Пример
pip install tqdm
Выход
F:\>pip install tqdm
Defaulting to user installation because normal site-packages is not writeable
Collecting tqdm
Downloading tqdm-4.65.0-py3-none-any.whl (77 kB)
---------------------------------------- 77.1/77.1 kB 1.1 MB/s eta 0:00:00
Requirement already satisfied: colorama in c:\users\krishna\appdata\roaming\python\python311\site-packages (from tqdm) (0.4.6)
Installing collected packages: tqdm
WARNING: The script tqdm.exe is installed in 'C:\Users\Krishna\AppData\Roaming\Python\Python311\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed tqdm-4.65.0
Пример
В этом примере мы выполняем итерацию по диапазону данных, а tqdm завершает цикл, отображая индикатор выполнения, который обновляется в режиме реального времени после завершения каждой итерации. Строка time.sleep(0.5) имитирует некоторую работу, выполняемую на каждой итерации.
from tqdm import tqdm
import time
data = range(10)
for item in tqdm(data):
time.sleep(0.5)
Выход
100%|██████████████████████████████████████████| 10/10 [00:05<00:00, 1.99it/s]
Обновление индикатора выполнения вручную
В этом подходе мы вручную рассчитываем процент выполнения и обновляем индикатор выполнения, выводя его на консоль с символом возврата каретки (\r), чтобы перезаписать предыдущую строку. Ниже приведен пример обновления индикатора выполнения вручную с помощью оператора print.
Пример
import time
total_iterations = 10
for i in range(total_iterations):
time.sleep(0.5)
progress = (i + 1) / total_iterations * 100
print(f"Progress: {progress:.1f}%", end="\r")
Выход
Progress: 10.0%
Progress: 20.0%
Progress: 30.0%
Progress: 40.0%
Progress: 50.0%
Progress: 60.0%
Progress: 70.0%
Progress: 80.0%
Progress: 90.0%
Progress: 100.0%
Использование сторонних библиотек
Помимо tqdm, существуют и другие сторонние библиотеки, такие как progressbar2 и alive_progress, которые предлагают дополнительные функции и возможности настройки индикаторов выполнения.
прогрессбар2
progressbar2 — еще одна популярная библиотека, предоставляющая ряд стилей и опций индикатора выполнения. Чтобы использовать библиотеку Progressbar2, сначала нам нужно установить ее с помощью pip.
pip install progressbar2
Пример
Здесь мы создаем индикатор выполнения с пользовательскими виджетами, используя список виджетов. Мы указываем максимальное значение для индикатора выполнения как 10, используя параметр max_value. Строка bar.update(i + 1) обновляет индикатор выполнения для каждой итерации.
from progressbar import ProgressBar
import time
total_iterations = 10
with ProgressBar(max_value=total_iterations) as bar:
for i in range(total_iterations):
time.sleep(0.5)
bar.update(i)
Выход
100% (10 of 10) |########################| Elapsed Time: 0:00:04 Time: 0:00:04
Живой прогресс
Alive-progress — это современная, многофункциональная библиотека для создания интерактивных индикаторов выполнения с расширенными возможностями настройки. Чтобы работать с live-progress, сначала нам нужно установить библиотеку с помощью pip.
pip install alive-progress
Defaulting to user installation because normal site-packages is not writeable
Collecting alive-progress
Downloading alive_progress-3.1.4-py3-none-any.whl (75 kB)
-------------------------------------- 75.9/75.9 kB 842.2 kB/s eta 0:00:00
Collecting about-time==4.2.1 (from alive-progress)
Downloading about_time-4.2.1-py3-none-any.whl (13 kB)
Collecting grapheme==0.6.0 (from alive-progress)
Downloading grapheme-0.6.0.tar.gz (207 kB)
-------------------------------------- 207.3/207.3 kB 4.2 MB/s eta 0:00:00
Preparing metadata (setup.py) ... done
Building wheels for collected packages: grapheme
Building wheel for grapheme (setup.py) ... done
Successfully built grapheme
Пример
В этом примере мы используем контекстный менеджер alive_bar для создания индикатора выполнения. len(data) указывает общее количество итераций. Функция bar() вызывается внутри цикла для обновления индикатора выполнения.
from alive_progress import alive_bar
import time
data = range(10)
with alive_bar(len(data)) as bar:
for item in data:
time.sleep(0.5)
bar()
Выход
|████████████████████████████████████████| 10/10 [100%] in 5.1s (1.91/s) ←[K ←[?25h←[J