进度条使用tqdm和multiprocess将代码减慢5倍

时间:2018-05-21 19:32:30

标签: python parallel-processing progress-bar multiprocess tqdm

我使用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()

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

1 个答案:

答案 0 :(得分:1)

是否与使用 mapimap 而不是 twdm 有关系?看到来自社区的这个很好的答案。 multiprocessing.Pool: What's the difference between map_async and imap?

另外,您可以使用 ministers 参数调整 tqdm 的更新频率。如果确实与tqdm有关,降低更新频率可能会解决您的问题。

<块引用>

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

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