本文会讨论如何使用rich取代tqdm。除了显示进度以外,rich还可以用于向终端写入富文本,并用于显示如表、标记和语法高亮显示代码等内容,如对此有兴趣可以查阅官网的cookbook
Why rich
外观是第一驱动力,不得不说tqdm的进度条太丑了
![](https://s1.ax1x.com/2022/10/31/xoN7vj.png)
tqdm进度显示
![](https://s1.ax1x.com/2022/10/31/xoNqrn.png)
rich进度显示
快速使用
- 使用track取代trange,tqdm
For
循环用track
取代tqdm
就可以.
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
位置参数和关键字参数
![](https://s1.ax1x.com/2022/10/31/xoNjaV.png)
其中可用的ProgressColumn
类有
![](https://s1.ax1x.com/2022/10/31/xoNv5T.png)