定义一个工作流#

下面首先创建只有一个任务的工作流,在 ecFlow 中工作流被称为 suite。

创建 python 文件#

${TUTORIAL_HOME}/def 目录中创建文件 cma_gfs_post.py

 1import os
 2
 3import ecflow
 4
 5
 6current_path = os.path.dirname(__file__)
 7tutorial_base = os.path.abspath(os.path.join(current_path, "../"))
 8def_path = os.path.join(tutorial_base, "def")
 9ecfout_path = os.path.join(tutorial_base, "ecfout")
10program_base_dir = os.path.join(tutorial_base, "program/cma-gfs-post-program")
11run_base_dir = os.path.join(tutorial_base, "workdir")
12
13defs = ecflow.Defs()
14
15with defs.add_suite("cma_gfs_post") as suite:
16    suite.add_variable("PROGRAM_BASE_DIR", program_base_dir)
17    suite.add_variable("RUN_BASE_DIR", run_base_dir)
18
19    suite.add_variable("ECF_INCLUDE", os.path.join(def_path, "include"))
20    suite.add_variable("ECF_FILES", os.path.join(def_path, "ecffiles"))
21
22    suite.add_variable("ECF_DATE", "20230806")
23    suite.add_variable("HH", "00")
24
25    with suite.add_task("pre_data2grib2") as tk_pre_data2grib2:
26        pass
27
28print(defs)
29def_output_path = str(os.path.join(def_path, "cma_gfs_post.def"))
30defs.save_as_defs(def_output_path)

上述脚本主要完成如下操作:

  • 15 行:定义名为 cma_tym 的工作流 (suite)

  • 16-23 行:为 suite 定义多个变量 (variable),包括目录等

  • 25-26 行:定义名为 pre_data2grib2 的任务 (task)

  • 29-30 行:将工作流定义写入到文件 cma_gfs_post.def

生成 def 文件#

运行 Python 脚本 cma_gfs_post.py,生成工作流定义文件 cma_gfs_post.def

cd ${TUTORIAL_HOME}/def
python3 cma_gfs_post.py

cma_gfs_post.def 文件是纯文本格式描述的工作流定义,文件内容如下:

#5.10.0
suite cma_gfs_post
  edit PROGRAM_BASE_DIR '/g7/JOB_TMP/wangdp/tutorial/ecflow/program/cma-gfs-post-program'
  edit RUN_BASE_DIR '/g7/JOB_TMP/wangdp/tutorial/ecflow/workdir'
  edit ECF_INCLUDE '/g7/JOB_TMP/wangdp/tutorial/ecflow/def/include'
  edit ECF_FILES '/g7/JOB_TMP/wangdp/tutorial/ecflow/def/ecffiles'
  edit ECF_DATE '20230806'
  edit HH '00'
  task pre_data2grib2
endsuite
# enddef