使用 tqdm 和多进程,进度条会使代码速度减慢 5 倍

问题描述 投票:0回答:1

我使用 tqdm 在 2.7 python 代码中添加了一个进度条,但它显着减慢了我的代码速度。例如,如果没有进度条,则需要 12 秒,而有进度条则需要 57 秒。

没有进度条的代码如下所示:

p = mp.Pool()
combs = various combinations
result = p.map(self.parallelize, combs)
p.close()
p.join()

带进度条的代码如下:

from tqdm import tqdm
p = mp.Pool()
combs = various combinations
result = list(tqdm(p.imap(self.parallelize, combs), total = 5000))
p.close()
p.join()

有没有更好的方法不会减慢我的代码速度?

python parallel-processing progress-bar multiprocess tqdm
1个回答
1
投票

是否与使用

map
imap
而不是twdm有关?请参阅社区的这个精彩答案。 multiprocessing.Pool:map_async 和 imap 有什么区别?

此外,您可以使用 miniters(最小迭代次数)参数调整

tqdm
的更新频率。如果确实与tqdm有关,降低更新频率可能会解决你的问题。

miniters :int或float,可选最小进度显示更新 间隔,迭代中。如果为0且dynamic_minters,会自动 调整为相等的最小间隔(CPU 效率更高,适合紧张的情况) 循环)。如果 > 0,将跳过指定迭代次数的显示。 调整这个和 mininterval 以获得非常有效的循环。如果你的 快速迭代和慢速迭代的进展都不稳定(网络、 跳过项目等)你应该设置 minters=1。

https://github.com/tqdm/tqdm#usage

© www.soinside.com 2019 - 2024. All rights reserved.