📢 转载信息
原文链接:https://www.kdnuggets.com/top-7-python-libraries-for-progress-bars
原文作者:Abid Ali Awan
Image by Author
# 引言:让等待不再煎熬
进度条能让等待的过程变得更容易忍受。它们清晰地展示了一项任务完成了多少、还剩多少,以及循环是仍在运行还是已经停滞。这种简单的可视化反馈提升了执行长时间运行脚本时的清晰度。
进度条在数据处理、模型训练和机器学习工作流中尤其有用,因为这些任务可能需要几分钟甚至数小时才能完成。开发者不再需要盲目等待,而是可以实时跟踪进度,更好地了解执行行为。
在本文中,我们将探讨七大Python进度条库。每个库都附带了示例代码,以便您可以快速、只需最少配置就能将其集成到项目中。
# 1. tqdm
tqdm 是最受欢迎的Python库之一,用于为循环和基于可迭代对象的(iterable-based)工作流添加进度条。它非常轻量级,易于集成,只需进行最少的代码更改即可直接使用。
该库能自动适应不同的环境,包括终端、Notebook和脚本,使其成为数据处理和机器学习任务中一个可靠的选择,这些任务需要对执行进度有良好的可见性。
主要特点:
- 只需最少的代码更改,即可自动跟踪任何可迭代对象的进度
- 性能极高,即使对于大型循环,开销也非常小
- 清晰且信息丰富,包括迭代速度和剩余时间估计
示例代码:
# pip install tqdm
from tqdm import tqdm
import time
records = range(1_000)
for record in tqdm(records, desc="Cleaning records"):
time.sleep(0.002)
输出:
Cleaning records: 100%|██████████| 1000/1000 [00:02<00:00, 457.58it/s]
# 2. rich
rich 是一个现代化的Python库,旨在创建视觉上吸引人且高度易读的终端输出,包括先进的进度条。与传统进度条库不同,rich 专注于展示效果,非常适合那些注重清晰度和美观性的应用,例如开发者工具、仪表板和命令行界面。
rich 中的进度条支持富文本格式、动态描述和流畅的动画。这使得它在您希望进度指示器既信息丰富又视觉精致,而无需在代码中添加复杂逻辑时特别有用。
主要特点:
- 带有颜色、样式和流畅动画的视觉丰富的进度条
- 用于跟踪可迭代对象进度的简单API
- 与表格、日志和面板等其他rich组件无缝集成
示例代码:
# pip install rich
from rich.progress import track
import time
endpoints = ["users", "orders", "payments", "logs"]
for api in track(endpoints, description="Fetching APIs"):
time.sleep(0.4)
输出:
Fetching APIs ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:01
# 3. alive-progress
alive-progress 是一个Python库,专注于为终端应用程序创建动画且视觉上引人入胜的进度条。它以提供流畅的动画和动态指示器而著称,使得长时间运行的任务更容易监控,观看体验也更愉快。
该库非常适合用户体验至关重要的脚本,例如训练循环、批处理作业和命令行工具。它提供了一个灵活的API,允许开发者在保持实现简洁的同时,自定义标题、样式和刷新行为。
主要特点:
- 带有动态指示器的流畅动画进度条
- 标题、样式和刷新行为的灵活定制
- 清晰的性能指标,包括经过时间和处理速度
示例代码:
# pip install alive-progress
from alive_progress import alive_bar
import time
epochs = 10
with alive_bar(epochs, title="Training model") as bar:
for _ in range(epochs):
time.sleep(0.6)
bar()
输出:
Training model |████████████████████████████████████████| 10/10 [100%] in 6.0s (1.67/s)
# 4. Halo
Halo 是一个Python库,旨在终端中显示优雅的“加载中”旋转动画。Halo 不以百分比或条形图的形式显示进度,而是提供信号指示正在进行中的过程,非常适合那些进度难以量化的任务。
该库常用于启动例程、网络调用和后台操作,在这些场景下,一个简单的状态指示器比传统的进度条更合适。其简洁的API和可定制的旋转器使其易于为命令行工具添加精致的反馈。
主要特点:
- 适用于不确定任务的轻量级旋转动画
- 带启动(start)、成功(succeed)和失败(fail)状态的简单直观API
- 多种内置旋转器样式和可定制的文本
示例代码:
# pip install halo
from halo import Halo
import time
spinner = Halo(text="Starting database", spinner="line")
spinner.start()
time.sleep(3)
spinner.succeed("Database ready")
输出:
| Starting database ✔ Database ready
# 5. ipywidgets
ipywidgets 是一个Python库,它能够在Jupyter Notebook中启用交互式用户界面组件,包括进度条、滑块、按钮和表单。与基于终端的库不同,ipywidgets 直接在Notebook界面中渲染进度指示器,这对于探索性数据分析和交互式实验特别有用。
使用ipywidgets 创建的进度条与Notebook工作流程无缝集成,允许用户在不使输出混乱的情况下监控长时间运行的任务。这使其成为Jupyter环境中进行机器学习实验、参数调优和迭代研究的有力选择。
主要特点:
- 在Jupyter Notebook中原生渲染进度条
- 超越进度跟踪的交互式UI组件
- 对进度更新和显示行为的精细控制
示例代码:
# pip install ipywidgets
import ipywidgets as widgets
from IPython.display import display
import time
progress = widgets.IntProgress(value=0, max=5, description="Experiments")
display(progress)
for _ in range(5):
time.sleep(1)
progress.value += 1
输出:
# 6. progress
progress 是一个轻量级的Python库,为基于终端的应用程序提供简单、经典的进度条。它专注于极简主义和可读性,是脚本中清晰度比高级样式或动画更重要的一个不错的选择。
该库提供多种进度指示器,包括条形图、旋转器和计数器,允许开发者选择最适合其用例的格式。其简洁的API使得在现有脚本中集成进度跟踪变得非常容易,只需最少的更改。
主要特点:
- 简单干净的终端进度条
- 多种进度指示器,如条形图和旋转器
- 最少的依赖和简单的集成
示例代码:
# pip install progress
from progress.bar import Bar
import time
files = ["a.csv", "b.csv", "c.csv"]
bar = Bar("Uploading files", max=len(files))
for _ in files:
time.sleep(0.7)
bar.next()
bar.finish()
输出:
Uploading files ████████████████████████████████ 100%
# 7. click
click 是一个Python库,用于构建命令行界面(CLI),它内置了对进度条的支持。与独立的进度条库不同,click 将进度跟踪直接集成到CLI命令中,非常适合在终端中分发和使用的工具。
click 提供的进度条简单、可靠,专为与其命令系统无缝协作而设计。当构建数据管道、自动化脚本或开发者工具,并且进度反馈应作为命令执行流程的一部分时,它尤其有用。
主要特点:
- 专为命令行界面设计的内置进度条
- 与click命令装饰器和选项的无缝集成
- 终端工具的可靠输出处理
示例代码:
# pip install click
import time
import click
@click.command()
def main():
items = list(range(30))
# Progressbar wraps the iterable with click.progressbar(items, label="Processing items")
with click.progressbar(items, label="Processing items") as bar:
for item in bar:
# Simulate work
time.sleep(0.05)
click.echo("Done!")
if __name__ == "__main__":
main()
输出:
Processing items [####################################] 100% Done!
# Python进度条库对比
下表对本文介绍的Python进度条库进行了简单对比,重点关注它们最适合的应用场景和典型用法。
| 库名 | 最佳用途 | 环境支持 | 风格 |
|---|---|---|---|
| tqdm | 数据处理和ML循环 | 终端, Jupyter Notebook | 简洁且信息丰富 |
| rich | 精致的CLI工具 | 终端, Jupyter Notebook | 彩色且带样式 |
| alive-progress | 动画化的长时间运行任务 | 终端, 有限的Notebook支持 | 动画化且动态 |
| Halo | 不确定进度的任务 | 仅限终端 | 基于旋转器 |
| ipywidgets | 交互式实验 | 仅限Jupyter Notebook | 原生的Notebook UI |
| progress | 简单脚本和批处理作业 | 仅限终端 | 极简且经典 |
| click | 命令行工具 | 终端 (CLI) | 功能的CLI输出 |
Abid Ali Awan (@1abidaliawan) 是一位认证的数据科学家专业人士,热爱构建机器学习模型。目前,他专注于内容创作和撰写关于机器学习和数据科学技术的博客。Abid 拥有技术管理硕士学位和电信工程学士学位。他的愿景是构建一个使用图神经网络来帮助有心理健康困扰的学生的AI产品。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区