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