Python-Framework für die Ausführung von Aufgaben und Abhängigkeiten

8

Ich brauche einen Rahmen, der mir Folgendes ermöglicht:

  • Erlaube es, Aufgaben dynamisch zu definieren (ich lese eine externe Konfigurationsdatei und erstelle die Aufgaben / Aufträge; task = erzeuge einen externen Befehl für Beispiel)

  • Ermöglicht die Angabe von Abhängigkeiten von vorhandenen Aufgaben (z. B. wird Task A ausgeführt, nachdem Task B beendet wurde)

  • Sie können Tasks parallel in mehreren Prozessen ausführen, wenn die Ausführungsreihenfolge dies zulässt (d. h. keine Abhängigkeiten zwischen Tasks)

  • Erlaube einer Aufgabe, von einem externen Ereignis abhängig zu sein (weiß nicht genau, wie das zu beschreiben ist, aber einige Aufgaben enden und sie werden nach einiger Zeit Ergebnisse erzeugen, wie ein laufender Hintergrundjob; ich muss einige angeben der Aufgaben, die von diesem Hintergrund-Job-abgeschlossen-Ereignis abhängig sind)

  • Rückgängig / Rollback-Unterstützung: Wenn eine Aufgabe fehlschlägt, versuchen Sie, alles, was zuvor ausgeführt wurde, rückgängig zu machen (ich erwarte nicht, dass dies in irgendeinem Rahmen implementiert wird, aber ich denke, es lohnt sich zu fragen ..)

Natürlich sieht das mehr oder weniger wie ein Build-System aus, aber ich bin anscheinend nicht in der Lage, etwas zu finden, mit dem ich Aufgaben dynamisch erstellen kann, die meisten Dinge, die ich bereits definiert habe "Makefile".

Irgendwelche Ideen?

    
Unknown 12.03.2012, 09:49
quelle

3 Antworten

4

Ich habe ein bisschen mehr Nachforschungen angestellt und bin auf doit gestoßen, das die Kernfunktionen bietet, die ich brauche, ohne zu übertreiben (nicht zu sagen, dass Sellerie den Job nicht gelöst hätte, aber das ist besser für meinen Anwendungsfall).

    
Unknown 18.03.2012, 21:38
quelle
1

Eine weitere Option ist make.

  • Schreiben Sie ein Makefile manuell oder lassen Sie es von einem Python-Skript schreiben
  • verwendet sinnvolle Zwischen-Ausgabedatei-Stufen
  • Run make, was dann die Prozesse aufrufen soll. Die Prozesse wären ein Python (Build) -Skript mit Parametern, die angeben, an welchen Dateien gearbeitet werden soll und welche Aufgabe zu erledigen ist.
  • Die parallele Ausführung von
  • wird mit -j
  • unterstützt
  • löscht auch Ausgabedateien, wenn Aufgaben fehlschlagen

Dies umgeht einige der Python-Parallelisierungsprobleme (GIL, Serialisierung). Offensichtlich nur geradlinig auf * nix-Plattformen.

    
j13r 03.02.2015 01:16
quelle
0

AFAIK, es gibt kein solches Framework in Python, das genau das tut, was Sie beschreiben. Also haben Sie die Wahl, entweder selbst etwas zu bauen oder einige Ihrer Anforderungen zu hacken und sie mit einem vorhandenen Werkzeug zu modellieren. Was nach Sellerie riecht. .

  • Sie können eine Sellerieaufgabe haben, die eine Konfigurationsdatei liest, die den Quellcode einiger Python-Funktionen enthält, und dann eval oder ast.literal_eval verwenden, um sie auszuführen.

  • Sellerie bietet eine Möglichkeit, Teilaufgaben (Abhängigkeiten zwischen Aufgaben) zu definieren. Wenn Sie also Ihre Abhängigkeiten kennen, können Sie sie entsprechend modellieren.

  • Sofern Sie die Ausführungsreihenfolge Ihrer Aufgaben kennen, können Sie sie an beliebig viele Arbeitscomputer weiterleiten.

  • Sie können das Ergebnis dieses Hintergrundjobs regelmäßig abfragen und dann die davon abhängigen Aufgaben starten.

  • Rückgängig / Rollback: Dies kann schwierig sein und hängt davon ab, was Sie rückgängig machen möchten. Ergebnisse? Zustand?

hymloth 12.03.2012 10:29
quelle