0

我有一份autosys工作清单。有些作业是由其他作业的成功状态触发的,有些作业是由预定时间触发的,或者状态+预定时间条件都需要满足。

我已经建立了一个节点树,每个节点代表一个工作。由于一个节点只能有一个父节点,而实际上,一项作业可能需要满足多个条件才能启动,我的解决方法是创建节点的多个实例并将它们附加到不同的父节点。

现在我的挑战是确定最大时间路径,但我还不知道。

我的挑战是:

  1. 当树建立起来时,并不是所有的节点都有开始时间,因为一些节点是由事件触发的,即它所有的父节点都成功了

  2. 一个节点可能出现在多个分支中

这是最小的示例:

root = Node("Root")
childa = Node("a", start="20:00", parent=root, runtime=1)
childa.parent = root
childb = Node("b", start="20:01", parent=root, runtime=2)
childc1 = Node("c", parent= childa, runtime=10)
childc2 = Node("c", parent= childb, runtime=10)
childd1 = Node("d", parent=childc1, runtime=5)
childe1 = Node("e", parent= childb, start="21:00", runtime=10)
childd2 = Node("d", parent=childe1, runtime=5)

for pre, _, node in RenderTree(root):
    if hasattr(node, "start"):
        print("{}{} {} run - {}".format(pre, node.name, node.start, node.runtime))
    elif hasattr(node, "runtime"):
        print("{}{} run {}".format(pre, node.name, node.runtime))
    else:
        print("{}{}".format(pre, node.name))

我得到了下面的树:

Root
├── a 20:00 run - 1
│   └── c run 10
│       └── d run 5
└── b 20:01 run - 2
    ├── c run 10
    └── e 21:00 run - 10
        └── d run 5

在上面的例子中:遵循 的路径root->a->c->d,然后 d 将开始20:00 + 1 minute +10 minute = 20:11 遵循root->b->e->d: 然后 d 将开始于21:10(as e has a hard time setup as 21:00)

我尝试了一级一级,但由于节点所在的级别不同,它似乎不起作用:(

4

0 回答 0