我使用 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()
有没有更好的方法不会减慢我的代码速度?
是否与使用
map
和imap
而不是twdm有关?请参阅社区的这个精彩答案。 multiprocessing.Pool:map_async 和 imap 有什么区别?
此外,您可以使用 miniters
(最小迭代次数)参数调整
tqdm的更新频率。如果确实与tqdm有关,降低更新频率可能会解决你的问题。
miniters :int或float,可选最小进度显示更新 间隔,迭代中。如果为0且dynamic_minters,会自动 调整为相等的最小间隔(CPU 效率更高,适合紧张的情况) 循环)。如果 > 0,将跳过指定迭代次数的显示。 调整这个和 mininterval 以获得非常有效的循环。如果你的 快速迭代和慢速迭代的进展都不稳定(网络、 跳过项目等)你应该设置 minters=1。