本文会讨论如何使用rich取代tqdm。除了显示进度以外,rich还可以用于向终端写入富文本,并用于显示如表、标记和语法高亮显示代码等内容,如对此有兴趣可以查阅官网的cookbook

Why rich

外观是第一驱动力,不得不说tqdm的进度条太丑了


tqdm进度显示


rich进度显示

快速使用

  1. 使用track取代trange,tqdm

For循环用track取代tqdm就可以.

  1. Process上下文管理器

使用rich.process.Process上下文处理器,管理多任务的进度显示,例如下面的教程代码和jw-hw的训练代码:

with Progress() as progress:
    task1 = progress.add_task("[red]Downloading...", total=1000)
    task2 = progress.add_task("[green]Processing...", total=1000)
    task3 = progress.add_task("[cyan]Cooking...", 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)
progress = Progress(TextColumn("[progress.description]{task.description}"),
                    SpinnerColumn(),
                    BarColumn(),
                    FileSizeColumn(),
                    TotalFileSizeColumn(),
                    DownloadColumn(),
                    TransferSpeedColumn(),
                    TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),
                    TimeRemainingColumn(),
                    TimeElapsedColumn())

epoch_tqdm = progress.add_task(description="epoch progress", total=10)
batch_tqdm = progress.add_task(description="batch progress", total=100)
progress.start() ## 开启
for ep in range(10):
    for batch in range(100):
        print("ep: {} batch: {}".format(ep, batch))
        progress.advance(batch_tqdm, advance=1)
        time.sleep(0.1)
    progress.advance(epoch_tqdm, advance=1)
    progress.reset(batch_tqdm)

add_task中创建一个任务,其中total是任务总量。每次完成人物的一部分是,通过update或者advance来给某个任务的completed增加advance

Process接收一系列的ProgressColumn位置参数和关键字参数


其中可用的ProgressColumn类有


参考