text: user11959: Simple question but I am stumped. (I am still learning Nextflow)
  I have a process which takes as input a channel of files and processes each file separately.
  There is a second process which needs to wait until all files are complete, so it can merge the outputs into a single collated file.
  How can I do this? I have tried subscribing to "onComplete" event to no avail as I cannot specify a process as the function to trigger.
  
  files = Channel.from params.the_files_list
  
  process process_files {
  
      input:
      val file_path from files
  
      output:
      stdout result
  
      """
      python ./process_one_file.py $file_path
      """
  }
  
  process merge_results {
      
      input:
      ????
  
      output:
      ????
  
      script:
      """
      echo "How to trigger this process once, after all individual files are processed?"
      """
          
  }
  
  ??? Want to do something like this
  result.subscribe onComplete: merge_results
  
  ```
  
  
  user11959: So from this page...
  https://groups.google.com/g/nextflow/c/jt77_-uApMs
  It is the "scatter-gather" pattern. I think the answer is to collect() the channel as follows - interested to hear if there is a better way
  files = Channel.from params.the_files_list
  
  process process_files {
  
      input:
      val file_path from files
  
      output:
      stdout result
  
      """
      python ./process_one_file.py $file_path
      """
  }
  
  process merge_results {
      
      input:
      val go from result.collect()
  
      script:
      """
      echo "Triggered once after all files complete!"
      """
          
  }
  
  
original_text: 11959: <p>Simple question but I am stumped. (I am still learning Nextflow)</p>
  <p>I have a process which takes as input a channel of files and processes each file separately.</p>
  <p>There is a second process which needs to wait until all files are complete, so it can merge the outputs into a single collated file.</p>
  <p>How can I do this? I have tried subscribing to &quot;onComplete&quot; event to no avail as I cannot specify a process as the function to trigger.</p>
  <pre><code>
  files = Channel.from params.the_files_list
  
  process process_files {
  
      input:
      val file_path from files
  
      output:
      stdout result
  
      &quot;&quot;&quot;
      python ./process_one_file.py $file_path
      &quot;&quot;&quot;
  }
  
  process merge_results {
      
      input:
      ????
  
      output:
      ????
  
      script:
      &quot;&quot;&quot;
      echo &quot;How to trigger this process once, after all individual files are processed?&quot;
      &quot;&quot;&quot;
          
  }
  
  ??? Want to do something like this
  result.subscribe onComplete: merge_results
  
  <span class="math-container">```</span>
  </code></pre>
   11959: <p>So from this page...
  <a href="https://groups.google.com/g/nextflow/c/jt77_-uApMs" rel="nofollow noreferrer">https://groups.google.com/g/nextflow/c/jt77_-uApMs</a></p>
  <p>It is the &quot;scatter-gather&quot; pattern. I think the answer is to collect() the channel as follows - interested to hear if there is a better way</p>
  <pre><code>files = Channel.from params.the_files_list
  
  process process_files {
  
      input:
      val file_path from files
  
      output:
      stdout result
  
      &quot;&quot;&quot;
      python ./process_one_file.py $file_path
      &quot;&quot;&quot;
  }
  
  process merge_results {
      
      input:
      val go from result.collect()
  
      script:
      &quot;&quot;&quot;
      echo &quot;Triggered once after all files complete!&quot;
      &quot;&quot;&quot;
          
  }
  </code></pre>
  