10

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

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

4

1 回答 1

1

会不会和使用mapandimap而不是twdm有关?从社区看到这个很好的答案。multiprocessing.Pool:map_async 和 imap 有什么区别?

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

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

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

于 2021-04-03T13:58:52.440 回答