2012-03-12 55 views
8

的Python框架,我需要一個框架,可以讓我做到以下幾點:任務執行和相關處理

  • 允許動態定義的任務(我會讀外部配置文件並創建任務/作業;任務=產卵例如外部命令)

  • 提供關於現有任務指定的依賴關係(在任務B是成品例如任務A將要運行)

  • 能夠並行運行的任務的方式在多個如果執行順序允許它進行處理(即沒有任何相互依賴關係)

  • 允許一個任務依賴於某個外部事件(不知道如何描述這個,但是一些任務完成後他們會在一段時間後產生結果,就像後臺運行的任務;我需要以指定一些任務取決於這個後臺作業完成事件)

  • 撤消/回滾支持:如果一個任務失敗,請嘗試撤消之前執行的所有操作(我不希望這樣做)在任何框架實現,但我想這是值得一問。)

所以,很顯然,這看起來或多或少像一個構建系統,但我似乎並沒有能夠找到的東西,讓我來動態地創建任務,我似乎已經在他們的「生成文件」中定義的大多數事情。

任何想法?

+0

嘗試芹菜...... – Denis 2012-03-12 10:26:10

回答

4

我一直在做一點更多的研究,我已經在doit它提供了核心功能,我需要,但是不矯枉過正(不是說芹菜不會解決工作跌跌撞撞,但這這對我的用例更好)。

0

據我所知,在Python中沒有這樣的框架,做你描述什麼。因此,您的選擇包括自行構建某些內容或者破解您的一些需求,並使用現有工具對其進行建模。聞起來像celery

  • 你可能有芹菜的任務,讀取其中包含一些Python功能的源代碼的配置文件,然後使用eval或ast.literal_eval執行它們。

  • 芹菜提供了一種方法來定義子任務(任務之間的依賴關係),所以如果你知道你的依賴,你可以將它們相應的模型。

  • 假設您知道任務的執行順序,您可以根據需要將它們路由到儘可能多的工作機器。

  • 您可以定期輪詢此後臺作業的結果,然後開始依賴它的任務。

  • 撤銷/回滾:這可能是棘手的,取決於你想要什麼撤消;結果如何?州?

+0

我在想芹菜,但它對我的需求有點矯枉過正;我不需要做分佈式任務處理,我的任務包括在本地機器上運行一些命令並獲取輸出。它就像一個編譯過程,在這個過程中編譯相互依賴的文件。 – Unknown 2012-03-12 10:36:22

+0

至於撤消部分,我正在考慮像類Task一樣的東西:用方法do()和undo()來處理邏輯,框架只需要知道它所做的操作並調用undo () – Unknown 2012-03-12 10:41:05

+0

看來你必須自己實現一些東西。你可以使用多進程模塊,但是在模擬你的依賴關係和實現回滾(可能在DB中存儲中間結果等)時會很痛苦。我堅持芹菜。這不是矯枉過正,它可以緩解許多同步/依賴問題。 – hymloth 2012-03-12 13:16:52

1

另一種選擇是使用make。

  • 手動寫Makefile文件,或讓一個python腳本寫
  • 使用有意義的中間輸出文件級
  • 運行make,那麼這應該調出的過程。這些進程將是一個python(build)腳本,其參數告訴它要處理哪些文件以及要執行什麼任務。
  • 並行執行支持與-j
  • 也刪除輸出文件,如果任務失敗

這就避免了一些Python的並行化問題(GIL,序列化)。 顯然只在* nix平臺上很簡單。

相關問題