添加complete
有时希望在满足某条件时不运行某任务,条件可以用 event 标识。 例如, event t2:b 可能暗示 task t2 没有生成期待的结果,所以我们不需要运行 task t4.
这种情况下,可以使用 complete 表达式(complete expression), 与关键词 trigger 有类似的语法, 但在满足条件时将任务置为 complete 状态而不运行该任务。
当 ecflow_server 尝试启动一个 task 时, 会检查 trigger 和 complete 表达式。如果满足 complete 表达式,任务就会被设为 complete 状态。 检查时,complete 表达式优先于 trigger 表达式。
complete 可以用于 task 间、family 间或者两者混合,也可以与 trigger 联合使用。
Suite Definition
在 suite definition 中定义 complete。
Text
# Definition of the suite test.suite testedit ECF_INCLUDE "$ECF_HOME" # replace '$ECF_HOME' with the path to your ECF_HOME directoryedit ECF_HOME "$ECF_HOME"family f1edit SLEEP 20task t1task t2trigger t1 eq complete # task t2 will only start when task t1 is completeevent a # task t2 will set an event aevent b # task t2 will set an event btask t3trigger t2:a # task t3 will start when event a is set in task t2task t4trigger t2 eq complete # task t4 will start when task t2 is completecomplete t2:b # task t4 will complete if event b is set in task t2endfamilyendsuite
Python
import osfrom pathlib import Pathfrom ecflow import Defs, Suite, Task, Family, Edit, Trigger, Event, Completedef create_family_f1():return Family("f1",Edit(SLEEP=20),Task("t1"),Task("t2",Trigger("t1 == complete"),Event('a'),Event('b')),Task("t3",Trigger("t2:a")),Task("t4",Trigger("t2 == complete"),Complete("t2:b")))print("Creating suite definition")home = os.path.abspath(Path(Path(__file__).parent, "../../../build/course"))defs = Defs(Suite('test',Edit(ECF_INCLUDE=home, ECF_HOME=home),create_family_f1()))print(defs)print("Checking job creation: .ecf -> .job0")print(defs.check_job_creation())print("Saving definition to file 'test.def'")defs.save_as_defs(str(Path(home, "test.def")))# To restore the definition from file 'test.def' we can use:# restored_defs = ecflow.Defs("test.def")
运行脚本:
$python test.pyCreating suite definition# 4.8.0suite testedit ECF_INCLUDE '/g3/wangdp/project/study/ecflow/ecflow-tutorial-code/build/course'edit ECF_HOME '/g3/wangdp/project/study/ecflow/ecflow-tutorial-code/build/course'family f1edit SLEEP '20'task t1task t2trigger t1 == completeevent aevent btask t3trigger t2:atask t4complete t2:btrigger t2 == completeendfamilyendsuiteChecking job creation: .ecf -> .job0Saving definition to file 'test.def'

任务
- 更新
test.def或test.py,为 t4 添加 complete 表达式 - 替换 suite
- 查看 ecflow_ui
- 查看 t4 的触发器
- 注意表示 task 未运行的图标

- 可以修改 task t2,检查事件未激活时 task t4 是否运行。注释 t2 脚本中 event b 的语句。

