Rich项目中的进度条功能详解

Rich项目中的进度条功能详解

【免费下载链接】rich Rich is a Python library for rich text and beautiful formatting in the terminal. 【免费下载链接】rich 项目地址: https://gitcode.com/gh_mirrors/ri/rich

概述

Rich是一个强大的Python终端格式化工具库,其中的进度条功能(Progress Display)能够优雅地展示长时间运行任务的进度信息。本文将全面介绍Rich库中进度条功能的使用方法和高级特性。

基本功能

Rich的进度条功能可以显示持续更新的任务进度信息,默认情况下会显示:

  • 任务描述
  • 进度条
  • 完成百分比
  • 预计剩余时间

该功能支持多任务并行显示,每个任务都有独立的进度条和信息展示,非常适合用于跟踪线程或进程中的并发任务。

基础用法

最简单的使用方式是调用track函数,它接受一个序列(如列表或range对象)和可选的描述信息。track函数会在每次迭代时更新进度信息。

import time
from rich.progress import track

for i in track(range(20), description="Processing..."):
    time.sleep(1)  # 模拟工作耗时

高级用法

对于更复杂的需求,可以直接使用Progress类。这个类设计为上下文管理器,能够自动管理进度条的启动和停止。

多任务示例

import time
from rich.progress import Progress

with Progress() as progress:
    task1 = progress.add_task("[red]下载中...", total=1000)
    task2 = progress.add_task("[green]处理中...", total=1000)
    task3 = progress.add_task("[cyan]烹饪中...", total=1000)

    while not progress.finished:
        progress.update(task1, advance=0.5)
        progress.update(task2, advance=0.3)
        progress.update(task3, advance=0.9)
        time.sleep(0.02)

这里的total参数表示任务完成需要的总步数,步数可以是任意对应用有意义的单位,如文件读取的字节数或处理的图片数量。

手动控制生命周期

如果不使用上下文管理器,需要手动调用start()stop()方法:

progress = Progress()
progress.start()
try:
    # 添加任务和更新逻辑
finally:
    progress.stop()

进度条类型

瞬态进度条

设置transient=True可以使进度条在完成后自动消失:

with Progress(transient=True) as progress:
    task = progress.add_task("工作中", total=100)
    do_work(task)

不确定进度条

当无法预知总步数时,可以使用不确定进度条:

task = progress.add_task("等待中", total=None)  # 显示脉冲动画
# 当知道总步数后
progress.start_task(task)
progress.update(task, total=known_total)

自定义显示

刷新频率

默认每秒刷新10次,可通过refresh_per_second调整:

Progress(refresh_per_second=5)  # 降低刷新频率

列布局

可以完全自定义进度条显示的列:

progress = Progress(
    TextColumn("[progress.description]{task.description}"),
    BarColumn(),
    TaskProgressColumn(),
    TimeRemainingColumn(),
)

Rich提供了多种预定义的列类型:

  • BarColumn: 进度条
  • TextColumn: 文本显示
  • TimeElapsedColumn: 已用时间
  • TimeRemainingColumn: 剩余时间
  • MofNCompleteColumn: 完成计数(如"50/100")
  • FileSizeColumn: 文件大小显示
  • SpinnerColumn: 旋转动画
  • 等等...

表格列布局

可以通过table_column参数精细控制各列宽度比例:

text_column = TextColumn("{task.description}", table_column=Column(ratio=1))
bar_column = BarColumn(bar_width=None, table_column=Column(ratio=2))
progress = Progress(text_column, bar_column, expand=True)

实用功能

文件读取进度

Rich提供了便捷的文件读取进度显示:

import json
from rich.progress import open

with open("data.json", "rb") as file:
    data = json.load(file)

对于已有的文件对象,可以使用wrap_file:

from rich.progress import wrap_file

with wrap_file(existing_file, size) as file:
    data = file.read()

打印输出

在进度条运行时打印信息:

with Progress() as progress:
    task = progress.add_task("工作中", total=10)
    for job in range(10):
        progress.console.print(f"处理任务 #{job}")
        run_job(job)
        progress.advance(task)

总结

Rich的进度条功能提供了从简单到复杂的各种使用场景支持,无论是单任务还是多任务,确定进度还是不确定进度,都能以优雅的方式展示。通过灵活的列配置和丰富的预定义组件,可以创建出满足各种需求的进度显示效果。

对于需要更复杂场景的开发者,还可以通过继承Progress类并重写get_renderables方法来实现完全自定义的进度显示效果。

【免费下载链接】rich Rich is a Python library for rich text and beautiful formatting in the terminal. 【免费下载链接】rich 项目地址: https://gitcode.com/gh_mirrors/ri/rich

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值