⬆︎
×
TOC
CHAT

tqdm进度条库简介

tqdm是一个快速、可扩展的Python进度条库,其名源自阿拉伯语单词“taqaddum”,意为“进步”或“进展”。通过简单代码,tqdm即可为程序增添一个精美且功能完备的进度条,将原本乏味的等待过程转化为可视化、可感知的体验。在处理大量数据、进行复杂计算或进行网络请求时,使用户能够直观地了解任务的进展情况,从而更好地预估任务完成时间和监控程序运行状态。

官网:tqdm.github.io

tqdm

1 安装tqdm库

可使用pip包管理工具安装tqdm库,命令如下:

pip install tqdm

若使用conda进行安装,可在终端中运行以下命令:

conda install -c conda-forge tqdm

上述命令会在当前激活的conda环境中安装tqdm库。若要指定安装到特定的Python3环境(假设环境名为myenv),则使用:

conda install -n myenv -c conda-forge tqdm

2 基本用法

2.1 在循环中使用tqdm()

tqdm最常见的用法即为在循环中添加进度条,只需在可迭代对象(Iterable)外添加一层tqdm()即可,代码如下:

from tqdm import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(0.1)

或使用trange(),即rangetqdm的结合体,示例如下:

from tqdm import trange
import time

for i in trange(100):
    time.sleep(0.1)

2.2 自定义进度条

tqdm还允许对进度条进行各种自定义设置,以满足不同的需求,例如更改进度条的颜色、前缀、后缀等。示例如下:

from tqdm import tqdm
import time

with tqdm(total=100, desc='Processing', unit='item', bar_format='{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}]', colour='green') as pbar:
    for i in range(100):
        time.sleep(0.1)
        pbar.update(1)  # 更新进度条

如上所示,使用with语句来管理tqdm对象,其中各参数的意义如下:

  • total:指定任务的总进度。
  • desc:设置进度条的前缀。
  • unit:设置进度的单位,如item
  • bar_format:自定义进度条的显示格式。格式如代码所示,此处设置了进度条的样式以及显示的信息,包括已完成进度、总进度、已用时间、剩余时间和进度速率等。
  • colour:设置进度条的颜色。此处设置为绿色green

每次循环中,通过调用pbar.update(1)来更新进度条,使其前进一格。


3 在不同场景下的应用

3.1 处理文件读写

在处理大文件时,可以使用tqdm来监控文件读取或写入的进度。例如读取一个大文件并逐行处理:

from tqdm import tqdm

with open('large_file.txt', 'r') as f:
    lines = f.readlines()
    for line in tqdm(lines):
        # 处理每一行数据
        pass

如上所示,tqdm会根据文件的行数自动生成进度条。

3.2 多线程和多进程中的应用

tqdm也能很好地与多线程和多进程库配合使用。以concurrent.futures库为例,并行处理一个任务列表:

import concurrent.futures
from tqdm import tqdm

def process_task(task):
    """处理任务的函数"""
    time.sleep(1)
    return task * 2

tasks = list(range(10))
with concurrent.futures.ThreadPoolExecutor() as executor:
    results = list(tqdm(executor.map(process_task, tasks), total=len(tasks)))

如上所示,使用ThreadPoolExecutor创建了一个线程池,并使用executor.map来并行处理任务列表。通过将executor.map的结果传递给tqdm,并设置total为任务总数,可以在多线程处理任务的过程中实时看到进度条的更新。

发表评论