2014-03-27 8 views
7

Ich weiß, dass mit -P Schalter oder @parallel Tag kann ich Aufgabe auf mehreren Hosts parallel ausführen.Wie mehrere Aufgaben parallel in Fabric ausgeführt werden

Ich versuche, mehr lange laufende Tasks parallel auf demselben Host ausgeführt werden:

@task 
def task1(): 
    # long running op 

@task 
def task2(): 
    #long running op 

@task 
def task3(): 
    #long running op 

@task 
def backup_all(): 
    execute(task1) 
    execute(task2) 
    execute(task3) 

Wie kann ich task1, task2 und task3 parallel auf demselben Host unter Verwendung von Geweben starten. Ich weiß, dass ich mehrere Fab-Prozesse mit verschiedenen Aufgaben ausführen kann, aber ich suche nach einer Lösung, die Fabric beinhaltet.

Antwort

2

Sie haben mehrere Möglichkeiten, diese Aufgabe zu lösen. Sie könnten bash/linux level Jobsteuerelemente verwenden und die Tasks im Hintergrund mit bg und dann wait ausführen, damit sie abgeschlossen werden können. Documentation explaining this Art des Kontrollmechanismus.

Wenn Sie wirklich noch Fabric/Python dafür verwenden möchten, müssten Sie wahrscheinlich die , die bereits in der lib ist und sorta schreiben Sie Ihre eigene Warteschlange, um diese zu schieben, oder read up on multiprocessing und einfach ein paar einfache Python Forking. Obwohl das im Wesentlichen alle job_queue tut.

+0

Da es keine "richtige" Antwort gibt, weil Fabric dies nicht unterstützt, werde ich diese Antwort auswählen. Es ist der Lösung am nächsten, die ich möchte. Vielen Dank. –

2

fabric führt eine Aufgabe pro Host aus. -P switch just runs task in parallel on different hosts. Keine Parallelisierung auf demselben Host

Sie könnten Befehle manuell parallelisieren, z. B. mit xargs -P oder GNU parallel.

Invoke (beta) beansprucht die Fähigkeit, Aufgaben parallel auszuführen. Es extrahiert Nicht-SSH-Teile von fabric. Wenn es auf Remote-Hosts installiert ist, können Sie Fabric verwenden, um den Befehl invoke aufzurufen, der Tasks parallel auf demselben Host ausführen würde.

+0

Ich werde in Invoke, danke schauen. –