基因容器 GCS
基因容器 GCS
- 最新动态
- 产品介绍
- 快速入门
- 用户指南
- Cromwell引擎使用指南
- 最佳实践
- 流程语法参考
- Python SDK参考
- API参考
-
CLI参考
- 命令总览
- 安装命令行工具
- 示例:使用命令行执行简单脚本
-
gcs 命令详情
- gcs version
- gcs config add
- gcs config list
- gcs get kubectl
- gcs get enviroment
- gcs set env
- gcs get sfs
- gcs set sfs
- gcs get obscli
- gcs obs upload
- gcs get workflow
- gcs create workflow
- gcs del workflow
- gcs update workflow
- gcs sub workflow
- gcs get execution
- gcs create execution
- gcs del execution
- gcs set execution
- gcs sub job
- gcs sub repjob
- gcs get tool
- gcs sub wdl
- gcs get wdl
- gcs set wdl
- get get fr
- config.ini配置说明
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
本文导读
展开导读
链接复制成功!
读取文件控制并发
在基因数据处理流程中,经常需要读取某个文件的内容来控制并发任务,或者获取另一个步骤的“输出结果”来控制并发任务。如,把样本文件按照固定大小进行拆分之后,需要得到所有的拆分文件名集合。或者上一步是分布式处理的,需要得到结果的总和。
图1 读取文件控制并发

这种情况下,我们需要使用GCS语法中特定的功能,get_result函数来获得。
确定性的并发任务,GCS语法如下:
job-2: commands_iter: command: echo ${1} ${2} vars_iter: - [A, B, C] # <==== 注意这里,表示${1} 的并发数量(范围) - [0, 1]
上述GCS语法中,[A, B, C] 表示并发数量为3数量。而动态的并发,就是数组[]中的值是上一步结果 。如下:
job-2: commands_iter: command: echo ${1} ${2} vars_iter: - get_result(job-1) # <==== 注意这里,数组结果是根据指定任务的stdout动态“计算出来的” - [0, 1]
真正get到的result是指定步骤的标准输出,即“stdout”。
例如 job-1 的stdout为“1 2 3 4”,那么上一步的结果就是
vars_iter: - ["1 2 3 4"]
注意,这里数组里面只有一个成员。也就是只有一个并发。
如果希望,每一个作为并发,可以加入“分割符”进行切分。具体语法见get_result函数。
vars_iter: - get_result( job-1, " ")
会得到:
vars_iter: - ["1", "2", "3", "4"]
这样就得到了4个并发,每个变量分别为"1", "2", "3", "4"。其中,分隔符是是任意的字符串。
在拥有get_result功能之后,如果需要实现根据上一步的结果,动态并发执行任务,则可以通过如下方式完成:
图2 动态并发执行任务

这样可以通过执行自己熟悉的shell命令,读取某个文件内容,或者列出目录中特定的文件,来得到想要的并发行为。
示例
job-list: type: GCS.Job tool: nginx:new-latest commands: # <== (1) 列出目录中文件 - | for i in `ls ${sfs}/${output-folder}`; do echo ${i} done job-a: type: GCS.Job tool: nginx:new-latest commands_iter: command: echo ${output-prefix}job-c-${item} >> ${sfs}/${output-folder}/${1}; # <== (3) 迭代式并发,替换变量 ${1} vars_iter: - get_result(job-list, '\n') # <== (2) 把job-list输出,按一行一个,切分为并发数组 depends: - target: job-list type: whole
父主题: 流程语法说明