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

如何在调用库函数的代码中添加进度条以展示程序执行进度

Python 为NetworkX图计算代码添加进度条实现方案

Python生态最常用的轻量进度条工具为tqdm,可以无侵入地接入自定义逻辑、第三方库函数实现进度展示,以下是针对你提供的代码的修改方案:

前置准备

首先安装依赖库:

pip install tqdm

核心修改思路

  • 图的总节点数可通过graph.number_of_nodes()直接获取,以此作为进度条的总长度,进度百分比准确度更高
  • 自定义DFS函数中,每成功访问1个未遍历的节点就更新一次进度
  • NetworkX的内置返回迭代器的函数(比如connected_components),直接将迭代器传入tqdm即可自动捕获迭代进度

修改后完整代码

import networkx as nx
from tqdm import tqdm
import sys
# 可选:调整Python递归深度限制,避免10万节点递归DFS爆栈,节点数过大建议改为迭代版DFS
sys.setrecursionlimit(1 << 25)

# 生成随机图,注意生成的节点为整数类型,后续调用DFS不要传字符串类型的节点ID
graph = nx.erdos_renyi_graph(100000, .2)
visited = set() 

# 初始化DFS进度条,总长度为总节点数,设置进度条描述
pbar = tqdm(total=graph.number_of_nodes(), desc="DFS遍历进度")

def dfs(visited, graph, node):
    if node not in visited:
        # 不需要打印节点的话可以注释掉下面这行,避免输出过多影响进度条展示
        # print(node)
        visited.add(node)
        # 每访问一个节点更新一次进度
        pbar.update(1)
        for neighbour in graph[node]:
            dfs(visited, graph, neighbour)

print("以下是深度优先搜索执行过程:")
# 注意这里节点ID是整数5000,不是字符串'5000',否则会找不到节点报错
dfs(visited, graph, 5000)
# DFS执行完后关闭进度条
pbar.close()

# 给连通分量计算加进度条,desc设置进度条描述
print("正在计算连通分量:")
coms = list(tqdm(nx.connected_components(graph), desc="连通分量计算进度"))

补充说明

  • 如果不需要打印每个遍历到的节点,建议注释掉DFS中的print(node)逻辑,大量的打印输出会拖慢执行速度,也会打乱进度条的展示效果
  • 节点量级超过10万时递归DFS有栈溢出风险,生产环境建议替换为迭代实现的DFS逻辑
  • tqdm支持自定义进度条样式、速度估算、剩余时间预估等配置,可根据需求调整参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:57:00