Каков наилучший способ для змеиного мейкера иметь постоянство использования ресурсов для данного правила?Это означает, что resources
данного правила распространяется на следующие правила.Примером может быть наложение ограничения на один входной файл bam за раз в разделе (например, /dev/shm
), в то время как он используется последующими правилами:
samples = ["sample1", "sample2", "sample3"]
motifs = ["motif_1", ... , "motif_n"]
rule all:
input: expand("output/{sample}.{motif}.out", sample=samples, motif=motifs)
rule copy_bam_to_shm:
input: "{sample}.bam"
output: temporary("/dev/shm/{sample}.bam")
resources: shm_usage = 1
shell: "cp {input} {output}"
rule process_motif:
input:
bam = rules.copy_bam_to_shm.output,
motif = "{motif}.bed"
output: "output/{sample}.{motif}.out"
shell: "run_bed_bam_and_beyond.py {input.bam} {input.bed} > {output}"
То, что я хочу, это то, что shm_usage
ограничение ресурсов, объявленное в copy_bam_to_shm
, остается в силе, пока я выполняю все последующие process_motif
шаги для текущего образца - выполняю последнее правило с максимально возможным количеством одновременных заданий.Только после выполнения sample1.bam sample2.bam будет скопировано в /dev/shm
и обработано, и так далее.Если это не ясно, см. Приведенный ниже псевдокод, чтобы узнать, какое поведение мне нужно:
# Pseudocode
for sample in samples
copy sample.bam to /dev/shm
for motif in motifs
process motif (in parallel with as many motifs as possible)
remove sample.bam from /dev/shm
done