You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snakemake规则中访问Profile默认资源以避免代码重复?

解决Snakemake规则中动态调用Profile默认资源的问题

方案1:直接通过workflow.default_resources获取默认资源

Snakemake的workflow对象可直接读取Profile中定义的默认资源参数,你可以在规则里直接写条件判断逻辑:

rule your_rule:
    input:
        "input/{sample}.txt"
    output:
        "output/{sample}.out"
    resources:
        cpus_per_task = 1 if wildcards.sample.endswith("_single") else workflow.default_resources["cpus_per_task"]
        # 替换CONDITION为你的实际判断逻辑,比如输入文件特征、wildcard参数等
    shell:
        "your_command --threads {resources.cpus_per_task} {input} > {output}"

workflow.default_resources会自动读取当前Profile配置的default-resources,无需额外传参。

方案2:用规则继承减少代码重复

如果单线程/多线程任务的核心逻辑高度一致,仅资源配置不同,可以用规则继承抽离公共部分:

# 基础规则:包含所有公共的输入、输出、shell命令
rule base_task:
    input:
        "input/{sample}.txt"
    output:
        "output/{sample}.out"
    shell:
        "your_command --threads {resources.cpus_per_task} {input} > {output}"

# 单线程规则:继承基础规则,仅覆盖资源配置
rule single_thread_task:
    inherit: base_task
    resources:
        cpus_per_task = 1
    wildcard_constraints:
        sample = r".*_single"

# 多线程规则:继承基础规则,使用Profile默认资源
rule multi_thread_task:
    inherit: base_task
    resources:
        cpus_per_task = workflow.default_resources["cpus_per_task"]
    wildcard_constraints:
        sample = r".*(?<!_single)"

这种方式避免了重复编写相同的输入输出和shell逻辑,只需维护资源配置与匹配条件。

方案3:用函数动态计算资源参数

如果条件判断逻辑复杂(比如结合输入文件大小、自定义配置等),可以定义函数返回资源值:

def get_cpu_count(wildcards, input):
    # 自定义条件逻辑,比如判断输入文件大小
    import os
    if os.path.getsize(input[0]) < 1024 * 1024:
        return 1
    else:
        return workflow.default_resources["cpus_per_task"]

rule dynamic_resource_task:
    input:
        "input/{sample}.txt"
    output:
        "output/{sample}.out"
    resources:
        cpus_per_task = get_cpu_count
    shell:
        "your_command --threads {resources.cpus_per_task} {input} > {output}"

函数可接收wildcards、input、output等参数,实现更灵活的资源动态分配。

内容的提问来源于stack exchange,提问作者Raphael Erik Hviding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:20:06