tqdm进度条多线程换行显示
时间: 2024-09-09 18:07:46 浏览: 68
Python Multiprocessing多进程 使用tqdm显示进度条的实现
tqdm是一个Python库,用于创建进度条,常用于数据处理、迭代任务的可视化。当你在多线程环境中使用tqdm时,它默认不会自动换行以跟踪每个线程的进度。如果你想让每个线程的进度单独显示并换行,你需要稍微做一些额外的工作。
首先,在创建`tqdm`实例时,你可以指定进程ID(PID)或线程ID(TID),例如:
```python
from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm
with ThreadPoolExecutor(max_workers=4) as executor:
futures = {executor.submit(task, i): f"Thread-{i}" for i in range(4)}
with tqdm(total=len(futures), unit='tasks', smoothing=0.5, dynamic_ncols=True,
desc='Multi-threaded Progress') as progress:
for future in concurrent.futures.as_completed(futures):
try:
result = future.result()
progress.set_postfix_str(futures[future])
except Exception as e:
print(f"{futures[future]} generated an exception: {e}")
```
这里,我们使用了`tqdm`的`set_postfix_str`方法来更新进度条的附加信息,每次完成一个任务时,会将对应的线程标识作为后缀显示。`dynamic_ncols=True`允许tqdm根据内容自适应调整列宽,使得不同长度的任务描述可以清晰显示。
请注意,这并不是tqdm的原生功能,如果你需要更精细的控制,可能需要结合其他手段如`sys.stdout.write`来手动刷新控制台并换行。
阅读全文