gpt4 book ai didi

python - 将 tqdm 进度条与异步一起使用

转载 作者:行者123 更新时间:2023-12-05 03:22:45 29 4
gpt4 key购买 nike

我正在尝试创建一个进度条,只要异步任务完成,它就会更新。

我有以下代码

scan_results = []
tasks = [self.run_scan(i) for i in input_paths]

pbar = tqdm(total=len(tasks), desc='Scanning files')

for f in asyncio.as_completed(tasks):
value = await f
pbar.update(1)
scan_results.append(value)

上面的代码生成了一个进度条,但直到所有任务完成后它才会更新(当有多个任务时它显示 0% 或 100%)

我也尝试过使用 tqdm.asyncio.tqdm.gather

with tqdm(total=len(input_paths)):
scan_results = await tqdm.gather(*[self.run_scan(i) for i in input_paths])

上面的代码生成多个进度条,和前面的代码块一样,它显示 0% 或 100%

我的出发点是

scan_results = await asyncio.gather(*[self.run_scan(i)for i in input_paths])

感谢您的帮助,使它与单个动态进度条一起工作

最佳答案

如果在创建并发任务后在 run_scan 扫描方法中调用 self.pbar.update(1),每个任务都会更新 pbar 为自己。所以你的类应该如下所示

class Cls:
async def run_scan(self, path):
...
self.pbar.update(1)

def scan(self, input_paths):
loop = asyncio.get_event_loop()
tasks = [loop.create_task(self.run_scan(i)) for i in input_paths]
self.pbar = tqdm(total=len(input_paths), desc='Scanning files')
loop.run_until_complete(asyncio.gather(*tasks))
loop.close()

关于python - 将 tqdm 进度条与异步一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72645095/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com