2012-08-22 43 views
2

我有一個芹菜任務,使得只能在系統範圍內並行運行的子進程調用。雖然我找出了一個更好的解決方案,但我需要能夠執行在單個工作人員上連續運行的任務。我如何確保芹菜任務在工人上連續運行?

我知道我可以創建一個表來跟蹤哪個服務器當前正在運行該任務,並等待它在未來任務運行之前完成,但似乎必須有更好的方法。我已經非常廣泛地看到芹菜文檔,並簡要地在rabbitmq文檔中無濟於事。

有沒有人提出了一個優雅的解決方案來解決這個問題,鉤入上述技術的一些隱藏功能?

+0

你能澄清一下你的設置嗎?你有多臺服務器,每臺服務器都運行一個芹菜工作者,但你不希望它們並行執行 - 這是否正確?你只有一個rabbitmq服務器在運行嗎? – dgel

+0

@dgel:一個rabbitmq服務器,有多個工作人員。 – sdolan

回答

2

如果你在django中設置了一個database cache,它使用所有服務器通用的數據庫,你可以實現這個celery cookbook solution for executing one task at time。而不是使用變量lock_id,只需使用一個常量。

如果執行任務的工作人員無法使用該鎖定,請致電retry將該任務返回到隊列中。

+0

我想這是我必須做的。你是否知道如何在任務中獲得工人的唯一標識符? – sdolan

+0

@sdolan:嗯......可惜沒有。 – dgel