multiprocessing pool tqdm
时间: 2024-03-26 07:33:03 浏览: 72
根据提供的引用内容,这段代码是使用Python的multiprocessing库中的Pool和tqdm实现并行计算的示例[^1]。下面是对代码的解释和演示:
1. 导入必要的库和模块:
```python
import tqdm
import glob
from multiprocessing import Pool
```
2. 定义并行处理函数:
```python
def process_img(fname:str):
try:
# 进行一些操作
i=1
return True, ""
except Exception as e:
return False, str(e)
```
3. 使用进程池进行并行计算:
```python
if __name__ == '__main__':
with Pool(processes=None) as p:
pbar = tqdm(total=1400) # 创建进度条
for succ, msg in p.map(process_img, glob.iglob("./imgs/*.jpg", recursive=True), 20):
pbar.update() # 更新进度条
if not succ:
print(msg)
pbar.close() # 关闭进度条
```
这段代码的作用是并行处理"./imgs/"目录下的所有.jpg文件,每次处理20个文件,并使用tqdm库显示处理进度。具体的步骤如下:
1. 导入必要的库和模块。
2. 定义并行处理函数。
3. 使用进程池进行并行计算,其中:
- `Pool(processes=None)`创建一个进程池,`processes=None`表示使用CPU核心数作为进程数。
- `pbar = tqdm(total=1400)`创建一个进度条,总共有1400个任务需要处理。
- `p.map(process_img, glob.iglob("./imgs/*.jpg", recursive=True), 20)`使用进程池的`map`方法并行处理`process_img`函数,`glob.iglob("./imgs/*.jpg", recursive=True)`返回匹配"./imgs/"目录下所有.jpg文件的可迭代对象,`20`表示每次处理20个文件。
- `pbar.update()`更新进度条。
- `if not succ: print(msg)`如果处理失败,则打印错误信息。
- `pbar.close()`关闭进度条。
阅读全文