我有一個很大的任務需要幾個主要步驟:步驟A必須在步驟B可以開始之前完成,等等。但是,在我的情況下,每個主要步驟可以分成多個進程,使用Delayed::Job
。如何執行Process#waitall的Delayed :: Job等價物?
問題:是否有一種簡單的方法只有在所有過程都完成了步驟A後才能啓動步驟B?
注意1:我不知道先驗有多少外部員工已經分手了,所以保留一個完成的工人的參考計數將無濟於事。注意2:我不想創建一個工作人員,他的唯一工作就是忙於等待其他工作完成。 Heroku工人花錢!注意3:我考慮讓每個工作人員檢查after
回調中的Delayed :: Job隊列,以確定它是否是最後一個在步驟A上工作的人,在這種情況下,它可以啓動步驟B.這可以起作用,但似乎充滿了陷阱。 (在沒有更好的答案的情況下,這是我正在使用的方法。)
我試過這種方法 - 即使有優先級,如果一個或多個步驟A任務失敗並正在等待重試,則步驟B任務將啓動。正如您所指出的,步驟B中的任務需要檢查步驟A是否已經完成。 – 2012-07-05 21:11:43