【问题标题】:snakemake list rules to execute in cluster and local在集群和本地执行的蛇形列表规则
【发布时间】:2020-05-23 12:55:03
【问题描述】:

我知道有办法使用localrules 声明需要在本地机器上执行的规则:

localrules: all, foo

是否有类似的选项来声明需要在集群上执行的规则?也许是clusterrules 选项?

我的管道中有一堆不需要在集群上执行的规则,虽然我可以使用localrules 将它们全部列出,但只需输入一两个需要执行的规则会更容易在集群上执行。

另一种选择是使用rule groups,它将在单个节点上执行来自组的所有规则,而不是使用集群中的多个节点。

【问题讨论】:

    标签: snakemake


    【解决方案1】:

    不幸的是,我不认为这是支持的。我检查了snakemake源代码,破解它的一种方法是这样做:

    all_rules = [rule for rule in dir(rules) if not rule.startswith("__")]
    cluster_rules = ["my_cluster_rule1", "my_cluster_rule2"]
    
    workflow._localrules = set(rule for rule in all_rules if rule not in cluster_rules)
    

    我还没有测试过,但我认为这应该可以。这样我们只需覆盖 Snakemake 从文档中解析的内容。这样做的问题是它可能在不同的蛇形版本之间不稳定。

    【讨论】:

    • all_rules 在我运行 print(all_rules) 之类的东西时对我来说是空的。它在脚本中的位置是否重要?现在,就在第一条规则之前,我通常声明localrules
    • @vkkodali 试着把它放在底部
    • 就是这样!我必须将这些线放在管道的底部并且它可以工作。谢谢@Maarten-vd-Sande
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多