Ich habe Probleme bei der Strukturierung meines Makefile, um meine Shell-Skripts in der gewünschten Reihenfolge auszuführen.Ausführen von Aufgaben parallel zu Makefile
Hier ist meine aktuelle Make-Datei
## 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 &
Das Problem
Alles funktioniert ok, bis ich den ##Run Models
Abschnitt beginnen. Dies sind alles unabhängige Skripte, die alle einmal ausgeführt werden können, sobald split_data
fertig ist. Ich möchte jedes der 3 Modellskripte gleichzeitig ausführen, also führe ich jedes im Hintergrund mit &.
Das Problem ist, dass meine letzte Aufgabe, predictions
beginnt gleichzeitig mit den drei vorhergehenden Aufgaben ausgeführt wird. Was ich möchte, ist, dass die 3 simultanen Modellskripte beendet werden und dann predictions
ausgeführt wird.
Mein Versuch
Meine vorgeschlagene Lösung ist meine endgültige Modell Aufgabe ausgeführt werden soll, full_gbm
ohne &, so dass predictions
bis nicht ausgeführt wird, dass beendet ist. Das sollte funktionieren, aber ich frage mich, ob es einen weniger "hacky" Weg gibt, dies zu erreichen - gibt es eine Möglichkeit, die Zielvariablen zu strukturieren, um das gleiche Ergebnis zu erzielen?