与Makefile并行运行任务

与Makefile并行运行任务,makefile,Makefile,我在构建Makefile以按所需顺序运行shell脚本时遇到问题 这是我当前的makefile ## Create data splits raw_data: src/data/get_data.sh src/data/get_data.sh hadoop fs -cat data/raw/target/* >> data/raw/target.csv hadoop fs -cat data/raw/control/* >> data/raw/co

我在构建Makefile以按所需顺序运行shell脚本时遇到问题

这是我当前的makefile

## Create data splits
raw_data: src/data/get_data.sh
    src/data/get_data.sh
    hadoop fs -cat data/raw/target/* >> data/raw/target.csv
    hadoop fs -cat data/raw/control/* >> data/raw/control.csv
    hadoop fs -rm -r -f data/raw
    touch raw_data_loaded

split_data: raw_data_loaded
    rm -rf data/interim/splits
    mkdir data/interim/splits    
    $(PYTHON_INTERPRETER) src/data/split_data.py

## Run Models
random_forest: split_data
    nohup $(PYTHON_INTERPRETER) src/models/random_forest.py > random_forest & 

under_gbm: split_data
    nohup $(PYTHON_INTERPRETER) src/models/undersampled_gbm.py > under_gbm &

full_gbm: split_data
    nohup $(PYTHON_INTERPRETER) src/models/full_gbm.py > full_gbm &

# Create predictions from model files
predictions: random_forest under_gbm full_gbm
    nohup $(PYTHON_INTERPRETER) src/models/predictions.py > predictions &
问题

在我开始运行模型部分之前,一切正常。这些都是独立的脚本,一旦split_数据完成,它们都可以运行。我想同时运行3个模型脚本中的每一个,所以我在后台使用&

问题是,我的上一个任务预测与前面的三个任务同时开始运行。我想让3个模型脚本同时完成,然后运行预测

我的尝试


我建议的解决方案是运行我的最后一个模型任务full_gbm,而不使用&,这样在完成之前预测不会运行。这应该是可行的,但我想知道是否有一种不太“黑”的方法来实现这一点-是否有某种方法来构造目标变量以实现相同的结果?

您没有说您使用的是Make的哪个实现。如果它是GNUMake,您可以使用-j选项调用它,以允许它决定哪些作业应该并行运行。然后可以从所有命令中删除nohup和&命令;在所有的随机林(位于_gbmfull _gbm下)完成之前,预测不会开始,而构建本身也不会在预测完成之前结束

此外,您不会丢失命令的最重要的退出状态