我有一个程序,是一个DAG,它处理和清除某些文件,组合它们,然后做额外的计算。我想要一种运行整个分析管道的方法,如果有任何变化,可以重新运行,但不需要重新处理每个组件。
我读到了Makefiles的故事,认为这听起来是个完美的解决方案。我还意识到,它可能已经过时,而且可能存在更好的替代方案,但据我所知,通常只能找到大量的工作流程调度器工具,这些工具并不完全适合这一目的(例如,气流、Luigi、Nextflow、Dagobah等)。
似乎其中很多都是过度使用调度程序,GUI等,这是我真的不需要的。我只想要一个文件来做以下工作:
Makefile示例:
.PHONY : dats
dats : isles.dat abyss.dat
isles.dat : books/isles.txt
python countwords.py books/isles.txt isles.dat
abyss.dat : books/abyss.txt
python countwords.py books/abyss.txt abyss.dat
.PHONY : clean
clean :
rm -f *.dat这是在python中运行这样的程序的最佳过程,还是有更好的方法?
发布于 2021-04-08 13:59:45
发布于 2019-11-08 01:22:04
这是在python中运行这样的程序的最佳过程,还是有更好的方法?
“最好的”肯定是在旁观者的眼里。但是,如果问题中提出的make-based方法令人满意地代表了问题,那么这是一个很好的方法。make实现是非常广泛可用的,它们的行为得到了很好的理解,并且通常非常适合出现类似于出现的问题。
还有其他与make竞争的构建工具,有些是用Python编写的,毫无疑问还有一些更复杂的软件框架可以应用于这项任务。尽管如此,如果您想专注于工作而不是构建框架来完成工作,那么我看不出有什么理由忽略您已经拥有的make-based解决方案。
发布于 2019-11-10 18:29:51
你提出这个问题的方式,我想说的是,蛇形是要走的路。话虽如此,GNU make可能已经老了,但不会很快消失,它已经过了测试并尝试死亡。
我不会说make,但我认为snakemake中的Makefile示例如下所示:
rule all:
input:
['isles.dat', 'abyss.dat'],
rule make_isles:
input:
'books/isles.txt',
output:
'isles.dat',
shell:
r"""
python countwords.py {input} {output}
"""
rule make_abyss:
input:
'books/abyss.txt',
output:
'abyss.dat',
shell:
r"""
python countwords.py {input} {output}
"""将其保存在一个名为Snakefile的文件中,并将其执行为:
snakemake # vanilla execution
snakemake -p -n # Print shell commands (-p). Dry-run mode (-n)
snakemake --delete-all-output # Same-ish as .PHONY cleansnakemake在生物信息学中很受欢迎,但它有相当广泛的用途。
https://stackoverflow.com/questions/58758669
复制相似问题