Was ich einfach tun möchte, ist warten auf Release-Sperre.Starten Sie Programme in Bash synchronisiert
Ich habe zum Beispiel 4 gleiche Skript (weil ich 4 Kern), die jeweils auf einem Teil eines Projekts jedes Skript funktioniert sieht wie folgt aus:
#!/bin/bash
./prerenderscript $1
scriptsync step1 4
./renderscript $1
scriptsync step2 4
./postprod $1
, wenn ich das Haupt-Skript ausführen, die die vier nennen Skript, ich möchte, dass jedes Skript einzeln funktioniert, aber irgendwann möchte ich, dass jedes Skript auf einander wartet, weil der nächste Teil alle Daten aus dem ersten Teil benötigt.
Für jetzt habe ich einige Logik wie die Anzahl der Dateien oder eine Datei, die für jeden Prozess erstellt und ihre Existenz mit anderen getestet werden.
Ich habe auch die Idee, eine Make-Datei zu verwenden und
prerender%: source
./prerender [email protected]
renderscript%: prerender1 prerender2 prerender3 prerender4
./renderscript [email protected]
postprod: renderscript1 renderscript2 renderscript3 renderscript4
./postprod [email protected]
Aber eigentlich der Prozess vereinfacht wird hier hat das Skript komplexer ist und für jeden den Faden muß Schritt seine Variablen halten.
Gibt es trotzdem, um das Skript synchron anstelle des Platzhalterbefehls scriptsync zu erhalten.
Ich würde ein Python-Skript als Wrapper verwenden und mit 'threading' arbeiten. Auf diese Weise könnte ich meine Shell-Skripts wiederverwenden und vom Python-Threading und anderen Funktionen profitieren. –
@ansi_lumen: 'threading' ist in' python' wegen der GIL nicht immer angemessen, es hängt von der Auslastung ab. – cdarke
@cdarke. Wahr. Man kann immer noch 'multiprocessing' verwenden und echte Prozesse ausführen, wenn' threading' nicht gut skaliert. Die Hauptidee war, eine Umgebung zu verwenden, die das Threading/Forking einfacher als 'bash' behandelt. –