ecFlow学习笔记02.3.5 —— 变量继承

目录

该教程的最新版已发布在GitHub上,请访问ecflow-tutorial-cn

这是 ecFlow 教程的一部分,完整教程请参看《ecFlow学习笔记02 —— 教程

  • * *之前的章节中,我们看到如何为 task 定义变量。当同一 family 下的所有 task 都共享同一个变量值时,该值可以定义在 family 层。这就是变量继承(variable inheritance)。

下面的例子中,也可将变量定义在 suite 层,得到相同的结果。
变量从父节点继承。子节点可以重新定义变量,这种情况下使用新的变量值。生成的变量(generated variables)也可以重新定义,但不推荐这么做,除非你很清楚可能出现的后果。

Suite Definition

Text

# Definition of the suite test.
suite test
   edit ECF_INCLUDE "$HOME/course"   # replace '$HOME' with the path to your home directory
   edit ECF_HOME    "$HOME/course"
   family f1
      edit SLEEP 20
      task t1
      task t2
   endfamily
endsuite

python

#!/usr/bin/env python2.7
import os
import ecflow
def create_family_f1():
    f1 = ecflow.Family("f1" )
    f1.add_variable("SLEEP", 20)
    f1.add_task("t1")
    f1.add_task("t2")
    return f1
print "Creating suite definition"
defs = ecflow.Defs()
suite = defs.add_suite("test")
suite.add_variable("ECF_INCLUDE", os.path.join(os.getenv("HOME"), "course"))
suite.add_variable("ECF_HOME",    os.path.join(os.getenv("HOME"), "course"))
suite.add_family( 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("test.def")

生成的 def 文件
# 4.0.9
suite test
edit ECF_HOME ‘/home/windroc/course’
edit ECF_INCLUDE ‘/home/windroc/course’
family f1
edit SLEEP ’20’
task t1
task t2
endfamily
endsuite

测试

如下的 suite definition

suite test
   edit SLEEP 100
   family f1
      edit SLEEP 80
      task t1
      task t2
         edit SLEEP 9
      family g1
          edit SLEEP 89
          task x1
              edit SLEEP 10
          task x2
      endfamily
   endfamily
   family f2
     task t1
     task t2
         edit SLEEP 77
     family g2
          task x1
              edit SLEEP 12
          task x2
      endfamily
   endfamily
endsuite

上面 suite 的 SLEEP 值

nodeSLEEP
/test/f1/t180
/test/f1/t29
/test/f1/g1/x110
/test/f1/g1/x289
/test/f2/t1100
/test/f2/t277
/test/f2/g2/x112
/test/f2/g2/x2100

词汇表

variable
task
family
variable inheritance
suite
node