Единственное решение, которое я могу придумать, - это объявить правила A, B и C локальными правилами, чтобы они выполнялись в основном задании по созданию змеи, а не отправлялись в качестве задания. Затем вы можете разбить ваш runAll на партии:
rule runAll1:
input: expand("{prefix}.C", prefix = VERY_MANY_PREFIXES[:1000])
rule runAll2:
input: expand("{prefix}.C", prefix = VERY_MANY_PREFIXES[1000:2000])
rule runAll3:
input: expand("{prefix}.C", prefix = VERY_MANY_PREFIXES[2000:3000])
...etc
Затем вы отправляете задание на создание змеи для runAll1, другое для runAll2 и так далее. Это довольно легко сделать с помощью цикла bash:
for i in {1..10}; do sbatch [sbatch params] snakemake runAll$i; done;
Другой вариант, который был бы более масштабируемым, чем создание нескольких правил runAll, заключался бы в создании вспомогательного сценария python, выполняющего что-то вроде этого:
import subprocess
for i in range(0, len(VERY_MANY_PREFIXES), 1000):
subprocess.run(['sbatch', 'snakemake'] + ['{prefix}'.C for prefix in VERY_MANY_PREFIXES[i:i+1000]])