2011-07-22 41 views
5

我目前正在使用Django-1.3與Django-Celery應用程序一起使用Django 1.3。順便提一下,我建議任何不熟悉芹菜的人都會檢查一下。Django-Celery - 從管理頁面重新提交任務?

我身邊有管理頁面功能的具體問題:

我們使用芹菜任務,以REST的API調用第三方合作伙伴。這些調用實際上是由用戶操作啓動的,因此您可以看到芹菜任務在這種情況下如何非常有用。

我們有一個關於如果管理員因某種原因應該能夠重新發送回調的用戶故事。現在,如果回調標準HTTP響應失敗,我們使用芹菜重試機制以不同的間隔自動重新發送它們。然而,這些回調可能是成千上萬的合作伙伴之一(而且很多),並不是所有的合作伙伴都會使用標準的HTTP響應代碼作爲其失敗響應。

長話短說,我一直沒能在網上找到任何可以通過管理界面重新發送芹菜任務的東西。我希望有人能夠對此有所瞭解。這似乎是一個非常明顯的功能塊,如果沒有這樣的功能,我相信它有一個很好的理由。如果沒有辦法做到這一點,我會喜歡它,如果有人能解釋原因。只是想了解更多關於芹菜的內部運作。

謝謝大家!對不起,我有時會漫不經心。

+0

順便說一句,如果沒有辦法重新發送任務,我會在管理員中自己實現一個。爲了做到這一點,我需要存儲在DB中醃製的參數。有誰知道是否有一種方法在Python中獲取傳入參數的元組,除了手動創建它嗎?這只是我很好奇的一件事。對不起,我知道我在一篇文章中違反了兩條問題的規則......但從技術上來說這是一條評論,所以我認爲我會安全的,嘿嘿。 – jnadro52

+0

對於arg問題,創建一個函數爲'def myFunc(* args)',任何傳遞的參數都將在元組'args'中。 – aid

+0

我明白了,所以如果我將* args添加到方法中,那麼所有傳入的參數都將在args列表中。我對這個功能很熟悉,但並不知道它是以這種方式工作的,已經定義了非關鍵字參數。謝謝你的幫助! – jnadro52

回答

2

您可以嘗試兩種方法,

1:小黑客模型:

您可以使用一個布爾字段並將其命名爲類似celery_retry和模型保存方法做這樣的事情。

def save(self, *args, **kwargs): 
    if self.celery_retry and self.user.is_superuser(): 
      celery_task.apply_async() 
    self.celery_retry = False 
    super(MyModel, self).save(*args, **kwargs) 

這只是一個想法,您可以確定自己如何以及何時提交芹菜任務。

2:擴展管理模板:

可以擴展管理模板,放在一個超鏈接到其重新提交該任務的視圖。

+0

感謝您的回覆......我最終做了#1。我正在尋找更多的內置方法。這似乎是從查看當前功能集中包含的內容。無論哪種方式,這是正確的答案,所以我給你一個很好的綠色複選標記。 – jnadro52