Asynchrone Hintergrundprozesse in Python?

Ich habe dies als Referenz verwendet, kann aber nicht genau das erreichen, was ich brauche:Aufrufen eines externen Befehls in Python

Ich habe auch folgendes gelesen:http://www.python.org/dev/peps/pep-3145/

Für unser Projekt haben wir 5 SVN-Prüfungen, die aktualisiert werden müssen, bevor wir unsere Anwendung bereitstellen können. In meiner Entwicklungsumgebung, in der schnelle Bereitstellungen für die Produktivität etwas wichtiger sind als eine Produktionsbereitstellung, habe ich daran gearbeitet, den Prozess zu beschleunigen.

Ich habe ein Bash-Skript, das anständig funktioniert hat, aber einige Einschränkungen hat. Ich starte mehrere 'svn updates' mit dem folgenden Bash-Befehl:

(svn update /repo1) & (svn update /repo2) & (svn update /repo3) &

Diese laufen alle parallel und es funktioniert ziemlich gut. Ich verwende dieses Muster auch im Rest des Build-Skripts, um jeden Ameisen-Build auszulösen und dann die Kriege nach Tomcat zu verschieben.

Ich habe jedoch keine Kontrolle über das Stoppen der Bereitstellung, wenn eines der Updates oder ein Build fehlschlägt.

Ich schreibe mein Bash-Skript mit Python neu, damit ich mehr Kontrolle über Verzweigungen und den Bereitstellungsprozess habe.

Ich verwende subprocess.call (), um die 'svn update / repo'-Befehle auszulösen, aber jeder handelt nacheinander. Ich versuche '(svn update / repo) &' und alle feuern ab, aber der Ergebniscode kehrt sofort zurück. Ich kann also nicht feststellen, ob ein bestimmter Befehl im asynchronen Modus fehlschlägt oder nicht.

import subprocess

subprocess.call( 'svn update /repo1', shell=True )
subprocess.call( 'svn update /repo2', shell=True )
subprocess.call( 'svn update /repo3', shell=True )

Ich würde gerne einen Weg finden, wie Python jeden Unix-Befehl abschaltet und wenn einer der Aufrufe zu irgendeinem Zeitpunkt fehlschlägt, stoppt das gesamte Skript.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage