在Snakemake中按规则设置集群核心

时间:2018-03-06 20:25:04

标签: snakemake

我需要下载数百个大文件,并通过我的snakemake管道运行它们。与我的下游管道相比,文件下载速度很快。我想将并行下载的数量限制为5,但允许下游处理使用100个内核。在snakemake中,有没有办法限制某个规则使用的核心数量?我想到5个核心不断抓取数据,而我的其他核心正在处理我已下载的数据。如果我像往常一样使用100个内核运行snakemake,它会尝试一次下载所有文件,并使服务器过载。 我已经尝试通过在规则中添加'threads:1'来实现它,但它不能正常工作。我想通过在规则中添加'threads:1',它应该返回与在该规则的命令行中使用'-j 1'选项时相同的结果,但它们返回不同的结果。

1 个答案:

答案 0 :(得分:1)

您可以使用resources来限制并行运行的规则数量。您可以根据需要为资源命名,请参阅resources documentation。以下是使用名称download_streams

的示例

Snakefile:

rule r1:
    output: touch("{field}.txt")
    resources: download_streams=1
    shell:
        "sleep 2; "
        "echo $(date '+%H:%M:%S') Finished downloading {output}"

正在运行snakemake download_{1..10}.txt --resources download_streams=2 -j 10 > log.txt会在log.txt

中提供以下内容
12:00:58 Finished downloading download_1.txt
12:00:58 Finished downloading download_5.txt
12:01:00 Finished downloading download_6.txt
12:01:00 Finished downloading download_8.txt
12:01:02 Finished downloading download_9.txt
12:01:02 Finished downloading download_10.txt
12:01:04 Finished downloading download_3.txt
12:01:04 Finished downloading download_2.txt
12:01:06 Finished downloading download_4.txt
12:01:06 Finished downloading download_7.txt