The multi statement
Synopsis
multi <command>,<command>...
multiExec <Groovy list of commands>
multi <config>:<command>,
<config>:<command>,
...
multi <config>:[<command>,<command>,<command>,...],
...
Availability
0.9.8+
Behavior
NOTE: the multi
statement is now deprecated as other mechanisms for achieving
parallel execution are better alternatives in nearly all scenarios. multi
has unexpected
behaviour in some situations and should be used with caution.
The multi statement executes multiple commands in parallel and waits for them all to finish. If any of the commands fail the whole pipeline stage fails, and all the failures are reported.
Generally you will want to use Bpipe's built in parallelization features to run multiple commands in parallel. However sometimes that may not fit how you want to model your pipeline stages. The multi statement let's you perform small-scale parallelization inside your pipeline stages.
Note: if you wish to pass a computed list of commands to multi, use the form multiExec instead (see example below).
Examples
Using comma delimited list of commands
hello = {
multi "echo mars > $output1.txt",
"echo jupiter > $output2.txt",
"echo earth > $output3.txt"
}
Computing a list of commands
hello = {
// Build a list of commands to execute in parallel
def outputs = (1..3).collect { "out${it}.txt" }
// Compute the commands we are going to execute
int n = 0
def commands =[$it > ${outputs[n++]("mars","jupiter","earth"].collect{"echo)}"}
// Tell Bpipe to produce the outputs from the commands
produce(outputs) {
multiExec commands
}
}
run { hello }