本文是对Pipeline.jl文档的低配翻译
CmdProgram
和JuliaProgram
name
: 定义CmdProgram的名字;
id_file
: 作业UID的前缀, 如id_file=".bwt"
会生成.bwt.xxxxx
的UID;
inputs
: []
列表, 可以用=>
添加默认值和类型;
outputs & infer_outputs
: 动态生成输出, 用法如下
\julia{ inferoutputs = quote Dict( "OUTPUTFILE" => joinpath( pwd(), string("out_", INPUT1, ".txt") ) ) end }
注意: 输出必须是outputs变量为key的字典
几个辅助函数: replaceext
, removeext
, to_str
, to_cmd
validate_inputs
: 检查输入依赖
\julia{ validateinputs = quote checkdependencyfile(IN1) && checkdependency_file(IN2) end }
prerequisites
: 在运行主程序前预先执行一些操作, 比如创建输出目录等
\julia{ prerequisites = quote mkpath(dirname(BAM)) end }
validate_outputs
: 检查输出结果
\julia{ validateoutputs = quote checkdependency_file(BAM) end }
wrap_up
: 打包操作, 如清理临时文件等等
\julia{ wrap_up = quote run(`samtools index BAM`) end }
verbose: true/:all
输出所有log;:min
输出最小info和error; :none/false
只输出error
retry: 尝试N次重跑
dry_run: 不真跑, 输出运行命令
stdout/err/log/append: 重定向输出, stdlog
是julia中@info, @warn, @error
等日志的io
运行的内在过程:
进入工作目录, 建立重定向(如果有);
检查工作流程和输入输出的兼容性, 合法性;
检查工作流是否跑过了;
检查依赖;
验证输入;
生成可执行的命令;
预操作(prerequisites);
执行命令;
验证输出;
打包wrap_up;
成功完事, 生成run_id, 返回(bool, outputs)
同一作者开发的类似PBS的作业管理工具包: JobSchedulers.jl, 和Pipelines完全兼容, 可以用Job()
指令代替run()
指令, 用submit!(::Job)提交作业。TODO: 挖个坑, 先不学这个了
大部分JuliaProgram的内容跟CmdProgram类似, 一些区别如下:
依赖的软件是否存在或者是否是合适的版本
例如:
通常如果在CmdProgram
中定义了CmdDependency
, 会自动检查的, 但也可以通过check_dependency()
手动检查。