用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。