如何在多进程循环中为URL列表添加tqdm进度条?
适配多进程URL列表的tqdm进度条实现
直接修改你的代码,通过apply_async的回调函数实现进度条更新,核心是把进度条总长度设为URL列表的长度,每个任务完成后触发进度条更新:
from tqdm import tqdm import pandas as pd from multiprocessing import Pool, Queue # 假设你的worker函数和队列q已定义 def worker(url, q): # 这里写你的URL处理逻辑 pass if __name__ == "__main__": dataset = "你的数据集路径.csv" q = Queue() urls = pd.read_csv(dataset, header=None).to_numpy().flatten() # 初始化进度条,总任务数为URL列表的长度 pbar = tqdm(total=len(urls)) # 定义进度条更新回调函数 def update(*_): pbar.update(1) pool = Pool() jobs = [] for url in urls: # 提交任务时绑定回调函数,任务完成后自动更新进度 job = pool.apply_async(worker, args=(url, q), callback=update) jobs.append(job) # 等待所有任务完成 for job in jobs: job.get() pool.close() pool.join() # 关闭进度条 pbar.close()
关键说明:
- 进度条的
total参数直接使用len(urls),精准对应要处理的URL总数 - 给每个
apply_async任务添加callback=update参数,每当一个worker任务执行完毕,就会调用update函数让进度条前进1格 - 保留你原有的
job.get()和pool管理逻辑,确保所有任务正常执行完成 - 最后调用
pbar.close()保证进度条输出格式整洁
内容的提问来源于stack exchange,提问作者ariyasas94
相关产品推荐
相关产品推荐

