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

如何用Rich实现球谐系数嵌套循环的进度条

使用Rich库实现动态嵌套进度条(适配球谐系数计算场景)

针对球谐系数计算中,外层循环l对应的内层m数量随l变化(总数为2l+1)的场景,以下是适配Rich库的嵌套进度条实现方案:

完整实现代码

import numpy as np
from rich.progress import Progress
from time import sleep

l = 32
with Progress() as progress:
    # 初始化外层进度任务:跟踪所有l值的处理进度
    outer_task = progress.add_task("[blue]处理l序列", total=l)
    
    for ll in np.arange(l):
        # 计算当前l对应的m值总数
        m_count = 2 * ll + 1
        # 动态创建内层进度任务:绑定当前l值,展示该l下m的处理进度
        inner_task = progress.add_task(f"[green]l={ll} 处理m序列", total=m_count)
        
        for mm in np.arange(-ll, ll + 1):
            # 模拟球谐系数计算过程
            sleep(0.01)
            # 推进内层进度条
            progress.update(inner_task, advance=1)
            # 输出计算日志,Rich会自动避免覆盖进度条
            progress.print(f"完成计算: l=[{ll}], m=[{mm}]")
        
        # 标记当前l对应的内层任务完成
        progress.update(inner_task, completed=m_count)
        # 推进外层进度条
        progress.update(outer_task, advance=1)

方案说明

  1. 动态适配内层循环长度:每次进入外层l循环时,根据当前ll计算m的总数,动态创建对应的内层进度任务,解决了固定子循环总数的限制。
  2. 进度与日志共存:使用progress.print()替代原生print,Rich会自动将日志输出在进度条下方,不会出现进度条被覆盖的问题。
  3. 清晰的层级展示:外层进度条跟踪整体l序列的处理进度,内层进度条绑定当前l值,直观展示每个l下m的处理状态。
  4. 避免tqdm的遗留问题:无需依赖leave=False参数,每个内层任务完成后会保留进度记录(或可通过progress.remove_task(inner_task)手动移除),不会丢失最后一条输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:22