2013-02-25 83 views
2

我正在開發一個Django的Web應用程序,它使用Celery處理異步任務,尤其是事務性電子郵件。Django與芹菜:計劃任務(ETA)並行執行多次

在我的電子郵件任務上的一個計劃與ETA選項,但它並行執行多次導致郵件鏈,非常討厭。我無法弄清楚爲什麼。 我檢查了兩次我的Django代碼,我確信它只發布一次。

我使用Redis作爲經紀人/後端結果。

我芹菜守護程序託管在Heroku上,並通過這個命令啓動:

python manage.py celeryd -E -B --loglevel=INFO 

感謝您的幫助。

編輯:我在這裏找到一個有效的解決方案感謝一個人對#celery IRC頻道:http://loose-bits.com/2010/10/distributed-task-locking-in-celery.html

+2

一定要閱讀:http://docs.celeryproject.org/en/latest/getting-started/brokers/redis.html#caveats – asksol 2013-02-26 13:10:00

+0

問題是我不知道我的應用程序中的最大ETA。我總是儘可能快地發佈它們,即使在將來也是如此(不經常發生)。要做到這一點,我應該更改我的應用程序設計,將其存儲在數據庫中,並且有一個爬蟲程序可以在1小時前發佈它們例如.. – 2013-02-26 18:26:21

回答

2
+2

感謝您的回答。 我在這裏查看類似的解決方案:http://loose-bits.com/2010/10/distributed-task-locking-in-celery.html利用Redis。 它似乎工作得很好,我定製了一點,因爲我需要阻止其他相同類型的任務和相同的上下文。 我將與任務函數名稱連接的任務參數散列爲鎖定鍵。 因爲我使用的是基於函數的任務,所以我還必須添加functools的wrapper裝飾器。 – 2013-02-26 04:22:27