2017-07-17 25 views
2

我們使用芹菜v4.0.2,rabbitMQ v3.5.7和花v0.9.1運行Django v1.10,並且使用芹菜,rabbitMQ和花都很新穎。在倒計時前重試芹菜任務

有一個函數x()被設置爲在失敗的情況下7天后重試。我們有1000個x的實例在生產中重新排隊。我們已經解決了這個問題,並希望儘快重試這些實例。

有沒有辦法在計劃時間之前強制重試?

回答

0

,我不得不通過獲取的計劃任務的列表和它們的參數,並要求解決這個問題for循環中的函數與參數。

顯然沒有辦法通過設計手動重試任務。您必須使用相同的參數創建另一個任務。這就是我終於做到:

i = inspect() 
scheduled = i.scheduled() 
for key in scheduled: 
    for element in scheduled[key]: 
     reqDict = element['request'] 
     if reqDict['type']=='module.function': 
      module.function.delay(converted_arguments) 
      revoke(reqDict['id'], terminate=True) 
0

如果您可以獲得任務列表,則可以在每個列表中調用task.retry(exc=exc)See docs.

嘗試celery.task.control.inspect().reserved()並查看您是否可以用這種方式過濾任務。 Example here.

你嘗試了很多事情之後,所以得到了這個編號的任務目標,每this answer.

result = MyTask.AsyncResult(task_id) 
result.get() 
+1

我試過了,但inspect.scheduled()不返回任務對象,但它的字典表示,因此我不能稱之爲task.retry就可以了。 我一直在試圖找到如何從任務ID獲取任務對象,但一直未能找到它。如果您可以共享替代/共享如何從其ID中獲取任務對象,那將是非常好的。 –

+0

@PrakharGupta嘗試'MyTask.AsyncResult()' –