tqdm进度条不重叠显示
时间: 2024-09-09 07:08:34 浏览: 59
`tqdm`是一个Python库,用于创建交互式的文本进度条,常用于处理迭代过程,如数据加载、计算等。当在同一程序中需要并行或串行执行多个任务,并且希望每个任务都有独立的进度指示时,如果不希望这些进度条互相重叠,你可以采取以下几种策略:
1. **线程安全模式**:`tqdm`默认在多线程环境中会自动管理进度条,每个线程会有自己的进度条。只需在并行操作前初始化一个`tqdm`对象,然后在对应的线程中更新它。
```python
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor() as executor:
futures = {executor.submit(my_function, i): f"Task {i}" for i in range(5)}
with tqdm(total=len(futures), desc="Main progress") as pbar:
for future in concurrent.futures.as_completed(futures):
result = future.result()
pbar.update(1)
```
2. **进程池模式**:如果你使用的是进程而不是线程,可以为每个进程单独创建一个`tqdm`实例。例如,使用`multiprocessing.Pool`:
```python
from multiprocessing import Pool
with Pool(processes=4) as pool:
results = pool.imap_unordered(my_function, range(5))
with tqdm(total=len(results)) as pbar:
for result in results:
pbar.update(1)
```
3. **分块显示**:如果你的进度条很多并且不想在一个大窗口中显示,可以设置`tqdm`的`ncols`参数来限制每行显示多少个进度条。这将使它们按行交替显示。
```python
pbar = tqdm(total=100, ncols=2) # 每行显示2个进度条
for _ in range(100):
# 更新进度
pbar.update(1)
```
阅读全文