使用tqdm和multiprocess,进度条会将代码减速5倍。

11

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

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


你需要按顺序获取结果吗?imap_unordered 可能会有所帮助。 - tdelaney
@tdelaney 结果确实需要保持有序。 - 0_o
你有没有找到解决方案? - ta8
1个回答

1
这是否与使用mapimap而不是twdm有关?请参考社区中的这个很棒的答案。multiprocessing.Pool: map_async和imap之间有什么区别? 此外,您可以通过miniters(最小迭代次数)参数来调整tqdm的更新频率。如果确实与tqdm有关,减少更新频率可能会解决您的问题。

miniters:int或float,可选 最小进度显示更新间隔,以迭代次数计算。如果为0且dynamic_miniters,则会自动调整为等于mininterval(更高效的CPU,适用于紧密循环)。如果> 0,则会跳过指定数量的迭代的显示。调整此参数和mininterval以获得非常高效的循环。如果您的进度在快速和慢速迭代(网络、跳过项目等)中都不稳定,应将miniters设置为1。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接