Этот пост принимает тур Whistlestop TQDM
: Фантастический, простой в использовании, расширяемой пакет бара прогресса для Python. Это делает добавление простых панелей прогресса в процессы Python чрезвычайно простым. Если вы являетесь инженером -программистом какого -либо опыта, скорее всего, вы будете использовать или разработать алгоритмы или преобразования данных, которые могут занять справедливое время – возможно, много часов или даже дней – для завершения.
Необычно для программного обеспечения решают просто распечатать сообщения о состоянии в консоли, или в некоторых более сложных случаях используются (отличный и рекомендуемый) встроенный модуль регистрации. Во многих случаях это вполне может быть хорошо. Однако, если вы выполняете задачу со многими сотнями шагов или по структуре данных со многими миллионами элементов, эти подходы иногда немного неясны и неясны, и, честно говоря, уродливая.
Покажи мне код!
Вот где TQDM
может войти. У него хороший чистый API, который позволяет быстро добавить панели прогресса в ваш код. Кроме того, он имеет легкий алгоритм оценки «сдержания времени», встроенный и в планку прогресса. Для целей этого поста взгляните на супер-минимальный пример измеченной петли для соскоба для сети с использованием TQDM
, ниже:
import time from tqdm import tqdm def get(): time.sleep(0.25) with tqdm(total=100) as progress: for i in range(100): get() progress.update(1)
В этом простом примере вы настроили TQDM
Прогресс, который ожидает процесса 100 шагов (скажем, 100 URL). Затем вы можете запустить петлю (с паузой 0,25 секунды между шагами), каждый раз, обновляя панель прогресса при завершении шага. Вы также можете обновить планку прогресса по произвольным суммам, если мы также вырваемся из петли. Это две строки кода (плюс оператор Import), чтобы получить хорошую небольшую панель прогресса в вашем коде:
Поддержка панд
Помимо прохладных небольших дополнений к выходам вашей программы, TQDM
Также хорошо интегрируется с другими широко используемыми пакетами. Возьми Панды
Например, вездесущая библиотека анализа данных Python. Данные ученые любят Панды
, но некоторые преобразования в рамках данных могут занять справедливое время. К счастью, есть поддержка автоматического добавления TQDM
Прогресс -бар на звонки в применить
Метод в Панды
Анкет Взгляните на пример ниже:
df = pd.read_csv("weather.csv") tqdm.pandas(desc="Applying Transformation") df.progress_apply(lambda x: x)
Когда вы запустите этот сценарий, вы увидите что -то вроде этого:
Технически, tqdm.pandas
Метод обезьяны исправляет progress_apply
Метод на Панды
Структуры данных, предоставляя им модифицированную версию общепринятого метода применения. Практически, когда мы называем progress_apply
Метод, пакет завершает стандартный Панды
применить
Метод с TQDM
индикатор. Это может очень удобно, когда вы обрабатываете большие кадры данных!
Поддержка параллельной обработки
Есть еще одно общее приложение, которое стоит упомянуть здесь: TQDM
Отлично подходит для настройки баров для прогресса для параллельных процессов. Вот пример с использованием некоторых из TQDM
Встроенная поддержка для обновления панели прогресса для параллельной карты:
import time from tqdm.contrib.concurrent import process_map def my_process(_): time.sleep(0.25) r = process_map(my_process, range(0, 100), max_workers=2, desc="MyProcess")
В этом случае у вас будет одна строка прогресса, которая каждый раз обновляется A my_process
звонить. Есть вариант второго использования: как насчет того, если у вас есть несколько длительных процессов, и вы хотите отслеживать их индивидуально? Это может быть предпочтительным, если вы хотите избежать сериализации и, например, де-протериализации больших объектов в процессах и вне процессов. Вы тоже можете это сделать:
import time import multiprocessing as mp from tqdm import tqdm def my_process(pos): _process = mp.current_process() with tqdm(desc=f"Process {pos}", total=100, position=pos) as progress: for _ in range(100): time.sleep(0.1) progress.update(1) n_cpu = mp.cpu_count( with mp.Pool(processes=n_cpu, initializer=tqdm.set_lock, initargs=(tqdm.get_lock(),)) as pool: pool.map(my_process, range(n_cpu))
Это должно дать вам вывод чем -то вроде:
Есть суть этого примера вы можете использовать тоже Анкет
Поддержка Юпитера
Последняя интеграция, которую я буду затрагиваю в этом посте, является встроенной поддержкой для использования TQDM
В ноутбуке Юпитера. Для этого вам нужно убедиться, что вы установили Юпитер , а также ipywidgets
. Тогда вам нужно запустить:
jupyter nbextension enable --py widgetsnbextension
Чтобы включить расширения. С помощью этой настройки, в ячейке в новой записной книжке, вы сможете запустить пример из более раннего:
from tqdm.notebook import tqdm arr = list(range(100)) with tqdm(desc="My Progress bar", total=len(arr)) as progress: for element in arr: progress.update(1)
И увидеть что -то похожее на это:
Круто, верно?
дальнейшее чтение
Заинтересован в том, чтобы узнать больше о TQDM
? Вот Их GitHub Анкет
Изображение обложки для этого поста было взято из TED TALK ON GROST BARS Анкет Стоит проверить.
Оригинал: “https://dev.to/markdouthwaite/killer-progress-bars-in-python-3na6”