如何解决使用networkxPython创建并执行任务工作流
摘要:
目标是运行由步骤(图形节点)及其依赖关系(图形边缘)的集合创建的工作流。
是否可以创建networkx.DiGraph()
并运行遍历以在不同节点上执行回调?
示例:
请查看示例图:
对于那组任务和依赖项,执行的可能性是:
- 以步骤
a
为切入点
在步骤 - 步骤
a
- 在步骤
c
之后立即并行执行步骤d
和b
(步骤c
首先完成) - 步骤
g
之后的步骤c
(步骤d
仍在进行中) - 步骤
e
之后的步骤d
(因为步骤c
已经完成)
在步骤 - 步骤
e
b
之后的f
之后的或
- 将步骤
a
作为入口点
在步骤 - 步骤
a
- 在步骤
c
之后立即并行执行步骤d
和b
(步骤d
首先完成) - 并行执行步骤
g
和e
(因为步骤d
在步骤c
之前完成了)
在步骤 - 步骤
e
b
之后的f
之后的下面,请在networkx
中找到创建此示例图的代码段:
import networkx as nx
W = nx.DiGraph()
nodes = ["a","b","c","d","e","f"]
edges = [("a","b"),("b","c"),("c","g"),"d"),"e"),("d",("e","f")]
W.add_nodes_from(nodes)
W.add_edges_from(edges)
是否有已知的解决方案以上述方式遍历图,打印节点的值(步骤名称)并随机休眠几秒钟以模拟正在运行的任务并执行一些计算? (使用基本的多线程)
谢谢。
解决方法
拓扑排序(nx.topological_sort)将返回任务的有效序列。
示例:
>>> list(nx.topological_sort(W))
['a','b','d','c','e','f','g']
如果您希望可以同时执行多组任务,则可以对其进行一些更改以进行分组。
def topological_sort_grouping(g):
# copy the graph
_g = g.copy()
res = []
# while _g is not empty
while _g:
zero_indegree = [v for v,d in _g.in_degree() if d == 0]
res.append(zero_indegree)
_g.remove_nodes_from(zero_indegree)
return res
示例:
>>> topological_sort_grouping(W)
[['a'],['b'],['c','d'],['e','g'],['f']]
给出组,您可以遍历它们并同时在同一组中执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。