2012-02-12 156 views
4

在我的應用程序中,我有一個很長的任務,所以我將它分成n個較小的任務。在這n個任務完成之後,將執行另一個任務並取決於這n個任務的結果。如何通過Task API實現這種依賴關係?即在其他n個任務之後執行一個任務。Google App Engine - 任務依賴關係

+0

發現一個類似於你的問題。 http://stackoverflow.com/questions/4224564/calling-a-script-after-tasks-queue-is-empty – jftsai 2012-02-12 13:52:30

回答

1

我認爲有2種方法可以解決這個問題。 假設任務TD依賴於其他N任務TA,並有一個隊列Q.到隊列Q.

  1. 推ñTA任務時,每個TA完成任務,它會檢查,如果本身是最後一個隊列Q.如果TA是隊列Q中的最後一個任務,則將TD推送到隊列Q.

  2. 推送n個TA任務和TD到隊列Q.當TD運行時,它檢查是否所有TA任務完成。如果有任何未完成的TA,則通過返回範圍在200-299之外的任何HTTP狀態代碼,TD取消其執行。

這些方法的關鍵是要任務的數量在隊列問:雖然我沒有試過,我知道有一個Python API提供了實驗方法來獲取特定隊列的任務隊列資源。 stats.totalTask​​s屬性是隊列中的隊列總數。

請參閱http://code.google.com/intl/en/appengine/docs/python/taskqueue/rest.html

1

拿上GAE Pipeline API一看,它是用來構建複雜的任務工作流像你描述的。

0

另一種方法可以是將所有任務添加到隊列中開始。讓N個初始任務在完成時將信息記錄到數據存儲區,以某種方式允許您查詢數據存儲區以查看它們是否全部運行。
當從屬任務運行時,它執行此數據存儲查詢以查看是否滿足其條件(檢查所有初始任務已記錄完成)。如果不是,它需要稍後運行。
要完成此任務,依賴任務可以將其自身副本添加到隊列中,並計劃在某個給定時間間隔後運行。或者(如上面的答案),依賴任務可以以錯誤狀態碼終止,在這種情況下,只要不超過隊列或任務的retry_limit,它將在稍後的某個點自動重試。