NetworkX 性能基准测试指南:基于 ASV 的基准套件配置与运行实践
图计算数据分析科学计算【免费下载链接】networkxNetwork Analysis in Python项目地址https://gitcode.com/gh_mirrors/ne/networkx点击查看免费下载导读本指南围绕 NetworkX 仓库中的 benchmarks/README.md 展开系统讲解 NetworkX 如何借助 asvAirspeed Velocity搭建性能回归监控体系从基准套件的目录组织、核心基准集合的覆盖范围到asv.conf.json的每一项关键配置、基于 pixi 的一键运行方式以及asv run/asv continuous等命令行操作。读完本文你将掌握如何在本地复现 NetworkX 的性能基准、如何对比任意两个 commit 的性能差异并理解底层基准代码的构造原理可直接服务于对核心图类或算法模块的性能评估与优化提案验证。基准套件概览用 ASV 守护 NetworkX 的性能NetworkX 使用asvAirspeed Velocity来监控性能回归performance regressions并评估性能改进提案。ASV 是一个面向 Python 项目的持续基准测试框架它能够在多个 Python 版本、多组依赖组合下反复运行基准函数记录每次运行的耗时并生成跨 commit 的可视化对比结果。全部基准代码位于仓库的 benchmarks/benchmarks 子目录中。这些文件按照其关注的对象松散组织与命名有的聚焦于数据结构如四种核心图类有的聚焦于具体算法如 PageRank、强连通分量、社区发现等还有一批聚焦于特定函数或图族如distance_measures.py、benchmark_aperiodic.py、benchmark_chordal.py、benchmark_ismags.py、benchmark_hits.py、benchmark_many_components.py、benchmark_neighbors.py、benchmark_regular.py、benchmark_shortest_path.py、benchmark_to_networkx_graph.py等。套件中有两组覆盖面最广的通用基准任何涉及核心代码的改动都应关注它们benchmark_classes.py覆盖核心 NetworkX 图类Graph、DiGraph、MultiGraph、MultiDiGraph的性能测试add_node、add_edge、subgraph等基本图操作。凡是改动核心类的代码都应运行该基准以确认是否存在性能提升或回退。benchmark_algorithms.py运行一小批覆盖代码库不同部分的算法基准使用不同密度的图以及来自 SNAP 数据集的真实世界数据集来运行这些算法。benchmark_classes.py核心图类基准源码解析benchmark_classes.py 中定义的GraphBenchmark类L6-L45展示了 ASV 基准的标准写法class GraphBenchmark: params [Graph, DiGraph, MultiGraph, MultiDiGraph] param_names [graph_type] def setup(self, graph_type): self.nodes list(range(1, 1000)) self.edges [] self.subgraph_nodes list(range(1, 100)) self.subgraph_nodes_large list(range(1, 900)) self.G getattr(nx, graph_type)()params声明基准的参数组合ASV 会自动为四种图类型各跑一遍param_names则是参数在结果报告中的显示名。setup在每次计时前执行负责构造 999 个节点的测试数据其中subgraph_nodes取 99 个节点、subgraph_nodes_large取 899 个节点分别模拟小规模与大规模的子图提取。该文件通过time_*前缀的方法定义计时基准L17-L45覆盖了最常用的核心类操作基准方法被测操作说明time_graph_creategetattr(nx, graph_type)()空图构造time_add_nodes_fromself.G.add_nodes_from(self.nodes)批量加节点999 个time_add_edges_fromself.G.add_edges_from(self.edges)批量加边空边表time_remove_nodes_fromself.G.remove_nodes_from(self.nodes)批量删节点time_remove_edges_fromself.G.remove_edges_from(self.edges)批量删边time_copyself.G.copy()图复制time_to_directedself.G.to_directed()有向化转换time_to_undirectedself.G.to_undirected()无向化转换time_subgraphself.G.subgraph(self.subgraph_nodes).copy()99 节点子图提取time_subgraph_largeself.G.subgraph(self.subgraph_nodes_large).copy()899 节点子图提取benchmark_algorithms.py跨模块算法基准源码解析benchmark_algorithms.py 包含多个基准类按图的有向性与权重特征进行划分UndirectedAlgorithmBenchmarksL14-L68在三种 Erdos-Renyi 随机图100 节点边概率 p0.1/0.5/0.9外加 SNAP 药物相互作用网络Drug Interaction network上运行time_betweenness_centrality同时覆盖底层最短路径方法time_greedy_modularity_communities、time_louvain_communities社区发现time_pagerank、time_connected_components、time_k_core、time_average_clustering、time_clusteringtime_minimum_spanning_tree_kruskal指定 Kruskal 算法的最小生成树其中 Erdos-Renyi 图在模块导入时构造便宜且确定而药物相互作用网络则在setup中惰性拉取确保基准发现阶段永不依赖网络。DirectedAlgorithmBenchmarksL71-L127在 18 个有向图上运行覆盖 100/1000/10000 节点的 Erdos-Renyi 图、空图与完全图主要计时time_tarjan_scc/time_kosaraju_scc两种强连通分量算法time_clustering聚类系数AlgorithmBenchmarksConnectedGraphsOnlyL130-L155使用固定 seed42 的连通图测试eigenvector_centrality_numpy注释提到用于确保连通性检查不过度影响性能见 gh-6888、gh-7549与square_clustering。WeightedGraphBenchmarkL232-L258面向带权图的最短路径算法其图集合由 utils.py 中的weighted_graph帮助函数生成为每条边赋随机weight并包含一个构造精巧的Dijkstra 最坏情形图dijkstra_relaxation_worst_caseL196-L214对每个i j添加权重为2*(j-1-i)1的边迫使 Dijkstra 松弛全部 Θ(n²) 条边从而暴露最坏复杂度下的性能。被测方法包括time_weighted_single_source_dijkstra与time_shortest_path。utils.py基准基础设施utils.py 提供了基准公用的辅助逻辑fetch_drug_interaction_networkL66-L80惰性下载并缓存 SNAP 药物相互作用数据集若下载失败如 SNAP 暂时不可用或沙箱环境无网络则抛出NotImplementedErrorASV 只会跳过依赖它的那一个基准而非整组失败。weighted_graph为生成器产出的图添加随机边权重用于带权最短路径基准。benchmark_name_from_func_call把图生成函数 参数格式化为可读字符串作为基准结果的图标签如erdos_renyi_graph(100, 0.1)。安装与配置asv.conf.json 关键字段基准运行由 asv.conf.json 配置。当前仓库的完整配置内容如下{ version: 1, project: networkx, project_url: https://networkx.org/, repo: .., branches: [main], environment_type: rattler, conda_channels: [conda-forge], show_commit_url: http://github.com/networkx/networkx/commit/, pythons: [3.12, 3.13, 3.14], matrix: { numpy: [], scipy: [], pandas: [] } }对一个可用的 ASV 配置而言最重要的三个选项是environment_type控制 ASV 使用的环境管理工具。pythons指定基准运行期间将使用哪些 Python 版本。matrix决定基准环境安装哪些以及什么版本的依赖。默认的 rattler 后端当前 asv.conf.json 默认使用rattler环境类型pythons为[3.12, 3.13, 3.14]。ASV 通过py-rattlerpixi 所基于的同一求解器从 conda-forge 供给每个解释器及其软依赖——因此三个 Python 版本可以从单一环境出发完成基准且无需安装 conda 二进制。对应地在根目录 pyproject.toml 的[project.optional-dependencies]中benchmarking依赖组L58-L69固定了配套工具链benchmarking [ asv0.6.5, py-rattler0.21,0.22, virtualenv, ]其中的版本约束有明确背景asv ≥ 0.6.5 自带libmambapy修复与python -m build默认构建命令见 gh-7638、gh-8638而py-rattler被固定0.22是因为 asv 0.6.5 的 rattler 插件仍调用 0.22 之前版本的solve(channels...)API0.22 已将其改名为sources。切换到内置环境管理如果不想使用 rattler可切换到 ASV 内置的 virtualenv 后端environment_type: virtualenv注意使用environment_type: virtualenv时建议将pythons字段限定为系统中实际安装的那些 Python 版本否则 ASV 可能无法为缺失的解释器创建环境。限制 Python 版本与调整依赖矩阵只对单一 Python 版本运行基准pythons: [3.13]matrix字段决定基准环境中安装的可选依赖。要准确反映安装了默认软依赖的 NetworkX 性能务必在matrix中包含numpy和scipy而要评估纯 Python 代码分支则将这些依赖从matrix中移除。注意部分基准本身依赖numpy、scipy和/或pandas例如benchmark_algorithms.py中药物网络下载使用了 pandasutils.py 特意将 pandas 的导入放在函数内部以便无 pandas 时也能完成基准发现移除依赖可能导致部分基准被跳过。当前默认配置即rattler后端 Python 3.12/3.13/3.14 每个环境安装默认软依赖numpy/scipy/pandas。使用 pixi 运行基准根目录 pyproject.toml 定义了一个独立的benchmark环境L402-L405它由benchmarking特性与py313组合而成作为 rattler 的宿主环境——ASV 会在其中自行供给 3.12/3.13/3.14 三个解释器及软依赖。相关 pixi 任务定义在 L372-L379[tool.pixi.feature.benchmarking.tasks] asv-machine { cmd asv machine --yes --conf asv.conf.json, cwd benchmarks } benchmark-continuous { cmd asv continuous --split --show-stderr --factor 1.5 --conf asv.conf.json, cwd benchmarks, depends-on [asv-machine] } benchmark-run { cmd asv run --conf asv.conf.json, cwd benchmarks, depends-on [asv-machine] }因此一条命令即可运行完整基准同时覆盖 Python 3.12/3.13/3.14 三个版本与默认软依赖pixi run -e benchmark benchmark-runpixi 任务还内置了机器硬件信息探测asv-machine与 1.5 倍性能差异判定因子的连续对比benchmark-continuous。在 CI 中仓库的.github/workflows/benchmark.yml会在带有run:benchmark标签的 Pull Request 上执行该基准任务。直接调用 asv 命令行以下命令直接调用asv需要在基准环境内运行例如pixi run -e benchmark asv ...或直接使用上文所示的 pixi 任务benchmark-run、benchmark-continuous。运行当前 HEAD 的基准asv run首次运行前可能需要执行asv machine完成本机硬件性能档位标定pixi 的asv-machine任务已封装该步骤。asv run默认会对branches字段指定的分支此处为main的当前 commit 执行整套基准。对比两个 commitasv continuous base_commit_hash test_commit_hashasv continuous会在两个 commit 之间分别运行基准并给出性能对比结论回退/提升/无变化这是评估性能改进提案或排查回归的标准用法。仓库默认的 pixi 封装还附加了--split --show-stderr --factor 1.5参数。用 --bench 限定基准子集--bench标志可将一次运行限定到部分基准。例如只对比两个 commit 的算法基准asv continuous --bench AlgorithmBenchmarks sha1 sha2同一模式也可用于指定单个基准方法asv continuous --bench AlgorithmBenchmarks.time_pagerank sha1 sha2--bench接受类名、方法名以及更细粒度的模式与asv run/asv continuous配合使用可以显著缩短验证迭代周期。实际工作流建议综合上述内容一次典型的性能验证流程为发现/组织基准在 benchmarks/benchmarks 下新增benchmark_主题.py按 ASV 约定定义params、setup与time_*方法参考GraphBenchmark与各算法基准类的写法。配置环境确认 asv.conf.json 的environment_type、pythons与matrix符合验证目标评估纯 Python 分支时移除numpy/scipy等软依赖评估默认安装时保留。运行pixi run -e benchmark benchmark-run一键跑全套或pixi run -e benchmark benchmark-continuous sha1 sha2对比提交需要快速迭代时用--bench限定到相关类如GraphBenchmark或AlgorithmBenchmarks。解读依据 ASV 生成的对比报告判断性能回归或提升由于基准包含真实世界数据集SNAP 药物网络惰性下载、失败自动跳过断网环境下其余基准仍可正常完成。小结NetworkX 的性能基准体系以 benchmarks/benchmarks 下的 ASV 基准类为核心覆盖四种核心图类的基本操作与覆盖广泛模块的算法基准含 SNAP 真实数据集与 Dijkstra 最坏情形图等构造性用例以 asv.conf.json 为配置中枢默认采用 rattler 后端在 Python 3.12/3.13/3.14 三版本上供给含numpy/scipy/pandas的环境运行层面则由 pyproject.toml 中的 pixibenchmark环境与benchmark-run/benchmark-continuous任务封装配合asv run、asv continuous、--bench等命令行即可完成从单次基准到提交对比、从全量套件到子集定位的完整性能监控闭环。任何触碰核心类或算法实现的改动都可借助该套件快速获得客观、可复现的性能证据。赞分享图计算数据分析科学计算【免费下载链接】networkxNetwork Analysis in Python项目地址https://gitcode.com/gh_mirrors/ne/networkx点击查看免费下载相关推荐Formation项目深度解析从新手到专家的10个核心功能Formation项目深度解析从新手到专家的10个核心功能 Formation是一个macOS前端开发环境自动化配置脚本专为设计师和开发者打造。这个强大的自数据工程工作流自动化PySpark 基准测试实战用 ASV 编写、运行与回归对比 PySpark 微基准PySpark 基准测试实战用 ASV 编写、运行与回归对比 PySpark 微基准 本指南以 Apache Spark 仓库中 python/benchma大数据数据分析批处理流处理机器学习图计算Ruby 基准测试指南使用 benchmark-driver 运行 ruby/benchmark 基准套件Ruby 基准测试指南使用 benchmark driver 运行 ruby/benchmark 基准套件 本指南以 benchmark/README.md编程语言语言运行时解释器编译器标准库JIT编译上一篇如何快速部署Apache ArrowDocker与K8s实践指南下一篇Apache Druid HTTP客户端终极指南自定义SSL配置与网络扩展开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从零基础到进阶:AI产品经理核心技能与实战落地指南

从零基础到进阶:AI产品经理核心技能与实战落地指南

最近总有产品经理朋友问我同一个问题:“不懂算法、没写过代码,到底能不能转AI产品经理?”我的回答通常很直接:能,但前提是你得先放下手里那套已经用惯的PRD模板和需求评审流程。过去几年,我从普通产品经理转…

2026/9/21 2:35:26 阅读更多 →
Sails 应用优雅关闭指南:sails.lower() 方法深度解析

Sails 应用优雅关闭指南:sails.lower() 方法深度解析

Sails 应用优雅关闭指南:sails.lower() 方法深度解析 【免费下载链接】sails Realtime MVC Framework for Node.js 项目地址: https://gitcode.com/gh_mirrors/sa/sails lower() 是 Sails 生命周期中与 lift() 对应的逆操作:它会关闭已启动的应用…

2026/9/21 2:35:26 阅读更多 →
连续小波变换原理详解:从傅里叶死穴到Python时频图实操

连续小波变换原理详解:从傅里叶死穴到Python时频图实操

站在信号处理这个行当里摸爬滚打这些年,我越来越觉得“连续小波变换(CWT)”是个被低估的工具。很多人一听“时频局部分析”就觉得高深,其实它解决的是一个特别接地气的问题:傅里叶变换能告诉你信号里有什么频率&#x…

2026/9/21 2:35:26 阅读更多 →

最新新闻

合肥建站公司排名前十名揭秘:保姆级建站教程与选型指南

合肥建站公司排名前十名揭秘:保姆级建站教程与选型指南

合肥建站公司排名前十名揭秘:保姆级建站教程与选型指南 域名服务器配置报错,SSL证书部署失败,ICP备案卡在初审?别慌,这往往是新手在寻找 合肥建站公司排名前十名…

2026/9/21 4:18:24 阅读更多 →
ARIS 工作流总览:从 idea 到 paper 的 13 条 pipeline 如何一次看全

ARIS 工作流总览:从 idea 到 paper 的 13 条 pipeline 如何一次看全

ARIS 工作流总览:从 idea 到 paper 的 13 条 pipeline 如何一次看全 【免费下载链接】Auto-claude-code-research-in-sleep ARIS ⚔️ (Auto-Research-In-Sleep) — Lightweight Markdown-only skills for autonomous ML research: cross-model review loops, idea …

2026/9/21 4:06:15 阅读更多 →
Roc 格式化器幂等性测试实战:从 issue 8851 快照看多行分发与字段访问的格式化处理

Roc 格式化器幂等性测试实战:从 issue 8851 快照看多行分发与字段访问的格式化处理

Roc 格式化器幂等性测试实战:从 issue 8851 快照看多行分发与字段访问的格式化处理 【免费下载链接】roc A fast, friendly, functional language. 项目地址: https://gitcode.com/GitHub_Trending/ro/roc 导读:本文以 Roc 编译器仓库中的快照测试…

2026/9/21 4:04:14 阅读更多 →
TypePHP编译器API参考:程序化调用PHP AOT编译器的完整指南

TypePHP编译器API参考:程序化调用PHP AOT编译器的完整指南

TypePHP编译器API参考:程序化调用PHP AOT编译器的完整指南 【免费下载链接】typephp Compile PHP to Native Binaries 项目地址: https://gitcode.com/GitHub_Trending/ty/typephp TypePHP 是一款用 PHP 编写的原生 AOT 编译器(tpc)&a…

2026/9/21 4:04:14 阅读更多 →
React Admin 实时数据提供者(Realtime Data Provider)接入完整指南:方法签名、内置适配器与自定义实现

React Admin 实时数据提供者(Realtime Data Provider)接入完整指南:方法签名、内置适配器与自定义实现

前端UI组件 【免费下载链接】react-admin A frontend Framework for single-page applications on top of REST/GraphQL APIs, using TypeScript, React and Material Design 项目地址: https://gitcode.com/gh_mirrors/re/react-admin 点击查看 免费下载 本指南系…

2026/9/21 4:04:14 阅读更多 →
VitePress 默认主题 Layout 指南:深入理解 doc、page、home 与自定义布局

VitePress 默认主题 Layout 指南:深入理解 doc、page、home 与自定义布局

VitePress 默认主题 Layout 指南:深入理解 doc、page、home 与自定义布局 【免费下载链接】vitepress Vite & Vue powered static site generator. 项目地址: https://gitcode.com/gh_mirrors/vi/vitepress VitePress 通过 frontmatter 中的 layout 选项…

2026/9/21 4:04:14 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →