我们如何在与 joblib 的并行执行中使用 tqdm?

新手上路,请多包涵

我想并行运行一个函数,并等待所有并行节点完成,使用 joblib。就像在示例中一样:

 from math import sqrt
from joblib import Parallel, delayed
Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(10))

但是,我希望在单个进度条中看到执行,就像 tqdm 一样,显示已经完成了多少作业。

你会怎么做?

原文由 Dror Hilman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

如果您的问题由许多部分组成,您可以将这些部分分成 k 子组,并行运行每个子组并更新其间的进度条,导致 k 更新进度。

文档中的以下示例对此进行了演示。

 >>> with Parallel(n_jobs=2) as parallel:
...    accumulator = 0.
...    n_iter = 0
...    while accumulator < 1000:
...        results = parallel(delayed(sqrt)(accumulator + i ** 2)
...                           for i in range(5))
...        accumulator += sum(results)  # synchronization barrier
...        n_iter += 1

https://pythonhosted.org/joblib/parallel.html#reusing-a-pool-of-workers

原文由 PureW 发布,翻译遵循 CC BY-SA 3.0 许可协议

只需将 range(10) 放入 tqdm(...) !这对你来说可能看起来好得令人难以置信,但它确实有效(在我的机器上):

 from math import sqrt
from joblib import Parallel, delayed
from tqdm import tqdm
result = Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in tqdm(range(100000)))

原文由 tyrex 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题