用法:
class graphlib.TopologicalSorter(graph=None)
提供对可散列节点图进行拓扑排序的函数。
拓扑顺序是图中顶点的线性排序,使得对于从顶点 u 到顶点 v 的每个有向边 u -> v,顶点 u 在排序中位于顶点 v 之前。例如,图的顶点可能代表要执行的任务,而边可能代表一个任务必须在另一个任务之前执行的约束;在此示例中,拓扑排序只是任务的有效序列。当且仅当图没有有向环,即如果它是有向无环图时,完整的拓扑排序是可能的。
如果提供了可选的
graph
参数,则它必须是表示有向无环图的字典,其中键是节点,值是图中该节点的所有前导的可迭代(具有指向中值的边的节点)钥匙)。可以使用add()
方法将其他节点添加到图形中。在一般情况下,对给定图执行排序所需的步骤如下:
使用可选的初始图创建
TopologicalSorter
的实例。向图中添加其他节点。
在图表上调用
prepare()
。当
is_active()
是True
时,迭代get_ready()
返回的节点并处理它们。完成处理后,在每个节点上调用done()
。
如果只需要立即对图中的节点进行排序并且不涉及并行性,则可以直接使用便捷方法
TopologicalSorter.static_order()
:>>> graph = {"D": {"B", "C"}, "C": {"A"}, "B": {"A"}} >>> ts = TopologicalSorter(graph) >>> tuple(ts.static_order()) ('A', 'C', 'B', 'D')
该类旨在轻松支持节点准备就绪时的并行处理。例如:
topological_sorter = TopologicalSorter() # Add nodes to 'topological_sorter'... topological_sorter.prepare() while topological_sorter.is_active(): for node in topological_sorter.get_ready(): # Worker threads or processes take nodes to work on off the # 'task_queue' queue. task_queue.put(node) # When the work for a node is done, workers put the node in # 'finalized_tasks_queue' so we can get more nodes to work on. # The definition of 'is_active()' guarantees that, at this point, at # least one node has been placed on 'task_queue' that hasn't yet # been passed to 'done()', so this blocking 'get()' must (eventually) # succeed. After calling 'done()', we loop back to call 'get_ready()' # again, so put newly freed nodes on 'task_queue' as soon as # logically possible. node = finalized_tasks_queue.get() topological_sorter.done(node)
3.9 版中的新函数。
相关用法
- Python graphlib.TopologicalSorter.static_order用法及代码示例
- Python graphlib.TopologicalSorter.is_active用法及代码示例
- Python numpy string greater_equal()用法及代码示例
- Python Tkinter grid()用法及代码示例
- Python PIL getbands() and getextrema()用法及代码示例
- Python PIL getpixel()用法及代码示例
- Python getattr()用法及代码示例
- Python OpenCV getTrackbarPos()用法及代码示例
- Python OpenCV getgaussiankernel()用法及代码示例
- Python gzip.compress(s)用法及代码示例
- Python globals()用法及代码示例
- Python OpenCV getRotationMatrix2D()用法及代码示例
- Python gcd()用法及代码示例
- Python PIL getbands()用法及代码示例
- Python gettext.GNUTranslations.ngettext用法及代码示例
- Python PIL getpalette()用法及代码示例
- Python PIL getcolors()用法及代码示例
- Python gc.is_finalized用法及代码示例
- Python gc.is_tracked用法及代码示例
- Python math gamma()用法及代码示例
注:本文由纯净天空筛选整理自python.org大神的英文原创作品 graphlib.TopologicalSorter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。