【问题标题】:progress bar slows down code by factor of 5 using tqdm and multiprocess进度条使用 tqdm 和多进程将代码减慢 5 倍
【发布时间】:2018-05-21 19:32:29
【问题描述】:

我使用 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 结果确实需要保持有序
  • 你找到解决办法了吗?

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


【解决方案1】:

会不会与mapimap的用法有关,而不是twdm?从社区看到这个很好的答案。 multiprocessing.Pool: What's the difference between map_async and imap?

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

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

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

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多