python 并发 维持tqdm进度条

发布于 2022-09-12 04:32:15 字数 226 浏览 19 评论 0

pool = multiprocessing.Pool(multiprocessing.cpu_count())
items = [......]
for item in items:
    pool.apply_async(func, args=item)
pool.join()

pool必须阻塞主线程, 我希望每个func运行完成后可以tqdm.update(1), 如何实现? 谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不必你懂 2022-09-19 04:32:15

callbackerror_callback 中调用 tqdm.update(1) 即可。

示例

import os
import time
import multiprocessing

from tqdm import trange


def foo(_):
    time.sleep(0.1)


if __name__ == '__main__':
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    items = range(100)
    p = trange(len(items))
    results = []
    for item in items:
        result = pool.apply_async(
            foo,
            args=(item,),
            callback=lambda _: p.update(1),
            error_callback=lambda _: p.update(1),
        )
        results.append(result)
    [i.get() for i in results]
    pool.close()
    pool.join()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文