NextFlow 是否适用于面向文件的案例?

Does NextFlow work for file-oriented cases?

从这里重新发布,希望得到澄清。

提前致谢。


我对 NextFlow 完全陌生,我很困惑我不能做这个简单的事情,也找不到关于它的文档:我知道 NF 是面向通道的,但它能处理面向文件的情况吗正确吗?

我的意思是,假设您有常见的情况(请参阅 this example,从另一个讨论中重写):

现在,我删除文件a,我希望A和C重新执行,C处理新的a和现有的b并重新创建c。

也就是说,

我是不是遗漏了什么,还是 NF 不适合上述面向文件的情况?

此外,有没有办法 运行 管道只到给定进程(例如,指定 'A')?

Nextflow processes are executed independently of each other and do not share a common (writable) state. The only way they can communicate is via asynchronous FIFO queues, called channels.

path 输入限定符允许在进程执行上下文中处理文件。 Nextflow 会将文件暂存在流程执行目录中,以便脚本可以访问它们。请注意,path 限定符是在版本 19.10.0 中引入的,作为 file 限定符的直接替代,应该是 preferred when using a recent version of Nextflow.

在您链接的代码中,storeDir 指令被三个进程中的每一个使用。这与 'the usual case' 场景相去甚远。 storeDir 指令指定的目录旨在作为过程结果的永久缓存。通常,这些类型的流程会有很大的一次性成本,您希望避免在以后的运行中再次支付。

我重构了你的示例,以表明当文件 'a' 从工作目录中删除时,进程 A 和 C 确实会重新执行:

process A {

    output:
    path 'a.txt' into a_ch

    """
    seq 1 3 > a.txt
    """
}

process B {

    output:
    path 'b.txt' into b_ch

    """
    seq 4 5 > b.txt
    """
}

process C { 

    input:
    path a_txt from a_ch
    path b_txt from b_ch

    output:
    path 'c.txt'
   
    """
    cat "${a_txt}" "${b_txt}" > c.txt
    """
}
$ nextflow run test.nf 
N E X T F L O W  ~  version 20.10.0
Launching `test.nf` [agitated_payne] - revision: baea5be781
executor >  local (3)
[29/4bba82] process > A [100%] 1 of 1 ✔
[d8/978a8d] process > B [100%] 1 of 1 ✔
[14/999791] process > C [100%] 1 of 1 ✔

$ find . -type f -name '*.txt'
./work/14/9997911fcc4587f565822e4c8a238c/c.txt
./work/29/4bba8269b9337f28d20225d605b7cf/a.txt
./work/d8/978a8df7e7e1e5885007ebb0e2915d/b.txt

$ rm ./work/29/4bba8269b9337f28d20225d605b7cf/a.txt

$ nextflow run test.nf -resume
N E X T F L O W  ~  version 20.10.0
Launching `test.nf` [grave_albattani] - revision: baea5be781
executor >  local (2)
[7a/ec8636] process > A [100%] 1 of 1 ✔
[d8/978a8d] process > B [100%] 1 of 1, cached: 1 ✔
[2d/c2d34c] process > C [100%] 1 of 1 ✔

说了这么多,我还是不清楚为什么首先需要从工作目录中删除文件。在不知道你想要达到什么目的的情况下,我会说避免接触工作目录中的文件,而是使用 publishDir directive 来发布你的处理结果,通常使用 'copy' 模式,即:publishDir './results', mode: 'copy'.它不适合所有工作流程,但它是一个很好的默认 IMO。然后,如果您出于某种原因想要,请从 'results' 文件夹中删除您的文件。当工作流程恢复时,Nextflow 将复制任何丢失的文件。此策略当然会在磁盘上保留已发布文件的两个副本。但是一旦你完成了工作流程,你可以简单地覆盖工作目录并将文件保存在 'results' 文件夹中。