You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook下starmap并行进程内部tqdm进度条不显示问题

问题原因

Jupyter Notebook 的前端输出上下文仅对主进程生效,通过 multiprocessing 创建的子进程无法直接向前端发送渲染 tqdm.notebook 进度条的请求,因此直接在子进程内调用 tqdm 不会产生任何显示。

可行解决方案

通过多进程共享队列转发进度更新信号,所有进度条的渲染逻辑统一放在主进程执行,即可实现每个进程对应独立进度条的效果,完整可运行代码如下:

from time import sleep
import multiprocessing
from threading import Thread
from tqdm.notebook import tqdm

# 子进程执行的任务逻辑
def product_(task_id, a, b, queue):
    total_step = 10
    for _ in range(total_step):
        sleep(0.1)
        # 向队列发送进度更新信号:(任务ID, 更新步长)
        queue.put((task_id, 1))
    # 任务结束发送终止信号
    queue.put((task_id, None))
    return a * b

# 主进程监听队列更新进度条
def progress_watcher(queue, pbar_map):
    while True:
        task_id, update_val = queue.get()
        if update_val is None:
            pbar_map[task_id].close()
            # 所有任务完成后退出监听
            if all(pbar.disable for pbar in pbar_map.values()):
                break
        else:
            pbar_map[task_id].update(update_val)

if __name__ == "__main__":
    # 自定义任务列表
    task_list = [(1, 2), (3, 4)]
    task_count = len(task_list)

    with multiprocessing.Manager() as manager:
        # 初始化共享队列和进度条映射
        progress_queue = manager.Queue()
        pbar_map = {
            idx: tqdm(total=10, desc=f"进程{idx}")
            for idx in range(task_count)
        }

        # 启动进度监听线程
        watcher_thread = Thread(target=progress_watcher, args=(progress_queue, pbar_map))
        watcher_thread.start()

        # 启动进程池执行任务
        with multiprocessing.Pool(processes=2) as pool:
            args_list = [
                (idx, a, b, progress_queue)
                for idx, (a, b) in enumerate(task_list)
            ]
            results = pool.starmap(product_, args_list)
        
        # 等待监听线程退出
        watcher_thread.join()

    print("所有任务执行结果:", results)

说明

  • 所有进度条的创建、更新、关闭逻辑都在Jupyter主进程内完成,完全适配Notebook的前端交互规则
  • 每个任务对应独立的进度条,支持自定义描述、总长度等参数
  • 不需要额外安装第三方依赖,仅用Python原生库和tqdm即可实现

内容的提问来源于stack exchange,提问作者Eudald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 20:30:01