规则定义中的“线程”通配符算术

时间:2018-10-30 15:16:08

标签: python multithreading snakemake

在我的工作流程中,我有两个正在一起整理的多线程程序。请从下面的Snakemake文件中查看规则定义。

rule do_the_thing:
    input: 'input.dat'
    output: 'output.dat'
    threads: 16
    shell: 'cmd1 --threads {threads} {input} | cmd2 --threads {threads} > {output}'

如前所述,该命令将占用32个线程。有没有一种方法可以对线程变量执行算术运算,例如,每个命令仅消耗可用线程的一半?

1 个答案:

答案 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}'