在我的工作流程中,我有两个正在一起整理的多线程程序。请从下面的Snakemake文件中查看规则定义。
rule do_the_thing:
input: 'input.dat'
output: 'output.dat'
threads: 16
shell: 'cmd1 --threads {threads} {input} | cmd2 --threads {threads} > {output}'
如前所述,该命令将占用32个线程。有没有一种方法可以对线程变量执行算术运算,例如,每个命令仅消耗可用线程的一半?
答案 0 :(得分:2)
有很多选择:
shell:
cpulimit --include-children -l {threads}00 --\
cmd1 --threads {threads} {input} | cmd2 --threads {threads} > {output}
threads: 16
params: lambda threads: max(1, threads//2)
shell:
cmd1 --threads {params.threads} {input} | cmd2 --threads {params.threads} > {output}
rule do_the_thing_first:
output: pipe('output.pipe')
threads: 8
shell: 'cmd1 --threads {threads} {input} > {output}'
rule do_the_thing_second:
input: 'output.pipe'
output: 'output.dat'
threads: 8
shell: 'cmd2 --threads {threads} > {output}'