全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

python3中graphlib模块如何使用?

graphlib模块提供TopologicalSorter类用于DAG拓扑排序,支持添加依赖、处理多前置节点及独立任务,通过static_order获取顺序,prepare与done实现增量调度,遇环抛CycleError。

Python 3.9 引入了 graphlib 模块,主要用于处理有向无环图(DAG)的拓扑排序,特别适合在任务调度、依赖解析等场景中使用。它的核心类是 TopologicalSorter,可以对节点之间的依赖关系进行排序,确保每个节点都在其依赖项之后执行。

1. 基本用法:TopologicalSorter

创建一个 TopologicalSorter 实例,添加节点及其依赖关系,然后调用 static_order() 获取拓扑排序结果。

  • from graphlib import TopologicalSorter
  • ts = TopologicalSorter()
  • ts.add('task2', 'task1') # task2 依赖 task1
  • ts.add('task3', 'task2')
  • order = tuple(ts.static_order())
  • print(order) # 输出: ('task1', 'task2', 'task3')

2. 添加多个依赖或独立节点

一个节点可以依赖多个前置节点,也可以添加不依赖任何其他节点的独立任务。

  • ts = TopologicalSorter()
  • ts.add('task4', 'task1', 'task2') # task4 依赖 task1 和 task2
  • ts.add('task1') # 独立节点
  • ts.add('task5') # 另一个独立节点
  • order = list(ts.static_order())
  • # 可能输出: ['task1', 'task2', 'task5', 'task4'] 或类似顺序

3. 处理复杂依赖与分批准备

对于大型图,可以使用 prepare()done() 方法实现增量处理,适用于异步或并行执行场景。

流程如下:

  • 调用 prepare() 获取当前可执行的节点组
  • 执行这些节点
  • 调用 done() 标记它们已完成,释放后续依赖
  • ts = TopologicalSorter()
  • ts.add('B', 'A')
  • ts.add('C', 'A')
  • ts.add('D', 'B', 'C')
  • ts.prepare() # 返回可运行的节点,如 A
  • ts.done('A') # 标记 A 完成
  • ts.prepare() # 现在 B 和 C 可运行
  • ts.done('B', 'C')
  • ts.prepare() # D 可运行

4. 注意事项与限制

graphlib 要求图必须是有向无环图(DAG)。如果存在循环依赖,调用 static_order() 会抛出 graphlib.CycleError

  • ts = TopologicalSorter()
  • ts.add('A', 'B')
  • ts.add('B', 'A') # 循环依赖
  • list(ts.static_order()) # 抛出 CycleError

基本上就这些。只要理清依赖关系,graphlib 就能帮你自动排好执行顺序,特别适合配置加载、构建系统、任务流水线等场景。不复杂但容易忽略的是 prepare/done 的协作模式,适合需要逐步推进的逻辑。


# python 


相关文章: 建站之星安装路径如何正确选择及配置?  智能起名网站制作软件有哪些,制作logo的软件?  建站之星如何实现五合一智能建站与营销推广?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  公司网站设计制作厂家,怎么创建自己的一个网站?  如何选择可靠的免备案建站服务器?  宿州网站制作公司兴策,安徽省低保查询网站?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  如何在Tomcat中配置并部署网站项目?  如何在Ubuntu系统下快速搭建WordPress个人网站?  C++如何编写函数模板?(泛型编程入门)  油猴 教程,油猴搜脚本为什么会网页无法显示?  模具网站制作流程,如何找模具客户?  建设网站制作价格,怎样建立自己的公司网站?  在线制作视频的网站有哪些,电脑如何制作视频短片?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  如何通过虚拟机搭建网站?详细步骤解析  网站专业制作公司有哪些,做一个公司网站要多少钱?  建站之星如何快速生成多端适配网站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  网站企业制作流程,用什么语言做企业网站比较好?  山东云建站价格为何差异显著?  魔方云NAT建站如何实现端口转发?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  建站主机选哪种环境更利于SEO优化?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  已有域名和空间如何快速搭建网站?  广州商城建站系统开发成本与周期如何控制?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  建站上传速度慢?如何优化加速网站加载效率?  建站之星3.0如何解决常见操作问题?  如何快速搭建响应式可视化网站?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何零基础开发自助建站系统?完整教程解析  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  金*站制作公司有哪些,金华教育集团官网?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何用wdcp快速搭建高效网站?  如何零成本快速生成个人自助网站?  电商平台网站制作流程,电商网站如何制作?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  建站主机选购指南:核心配置优化与品牌推荐方案  宝塔建站助手安装配置与建站模板使用全流程解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。