定义一个工作流#
下面首先创建只有一个任务的工作流,在 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