Nextflow如何创建文件类value channel 为多并行进程传入文件输入
解决方案
你需要使用collect()操作符将匹配文件的队列通道转换为包含全量文件列表的单元素值通道,值通道的内容可被任意数量的并行进程重复消费,不会出现逐个分发消耗的问题。修改后的代码如下:
proteins = Channel.fromPath( '/some/path/*.fa' ).collect() executions = Channel.from(1, 2, 3, 4) process blastThemAll { input: val num from executions path query_files from proteins script: """ # 示例:遍历所有蛋白文件执行blastp,可根据实际需求调整命令 for fa in ${query_files} do blastp -query \$fa -db nr done """ }
核心说明
Channel.fromPath默认生成队列通道,每消费一次就会发出下一个元素,无法被多个进程重复读取。调用collect()后,会将所有匹配到的.fa文件打包为一个列表,以单元素形式生成值通道,即可满足所有进程读取全部文件的需求。- 进程输入声明中推荐使用
path关键字(Nextflow 20.07.0+版本支持,旧版本可替换为file)接收文件列表,若需要将列表中每个文件都识别为独立输入项,可添加(*)修饰符,即path(* query_files),所有文件都会被自动同步到进程的工作目录中。 - 如果你的blastp命令本身支持一次传入多个query文件,不需要循环,直接把
${query_files}传给对应参数即可。
内容的提问来源于stack exchange,提问作者Moshe Shaham
相关产品推荐
相关产品推荐

