tqdm是一个快速、可扩展的Python进度条库,其名源自阿拉伯语单词“taqaddum”,意为“进步”或“进展”。通过简单代码,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()
,即range
和tqdm
的结合体,示例如下:
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
为任务总数,可以在多线程处理任务的过程中实时看到进度条的更新。