2011-10-14 77 views
3

我已經閱讀了芹菜文檔(Cookbook :: Creating Tasks)中的相應文章,但是我並不完全喜歡所提出的解決方案。我有很長時間的運行任務(從15分鐘到1小時甚至更多),因此選擇一些LOCK_EXPIRE設置看起來並不可靠:如果結果太小,我會同時運行兩個任務,如果它太大,芹菜過程因某種原因死亡,我需要手動刪除鎖定緩存鍵。創建一次只執行一次的Celery任務

我想到的想法是我可以使用兩種不同的鎖:一種是用fcntl.lockf創建的(對於不同的芹菜工作者進程),另一種是使用threading.Lock()(當任務在相同的芹菜過程)。然而有兩個鎖似乎有點過分。

所以,我的問題是:什麼是我的問題最簡單的解決方案?它不必是跨平臺的,只能支持Linux。

回答

2

只使用一個鎖而不失效,並創建一個「調查員」任務,檢查一切是否正常,即如果另一個任務意外中斷,它會修復鎖定問題。作爲一個加號,看看here

+0

謝謝你的回答。我最喜歡Redis鎖定解決方案。 –