The multi statement


  multi <command>,<command>...

  multiExec <Groovy list of commands>

  multi <config>:<command>,

  multi <config>:[<command>,<command>,<command>,...],




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).


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 }