我們使用芹菜v4.0.2,rabbitMQ v3.5.7和花v0.9.1運行Django v1.10,並且使用芹菜,rabbitMQ和花都很新穎。在倒計時前重試芹菜任務
有一個函數x()被設置爲在失敗的情況下7天后重試。我們有1000個x的實例在生產中重新排隊。我們已經解決了這個問題,並希望儘快重試這些實例。
有沒有辦法在計劃時間之前強制重試?
我們使用芹菜v4.0.2,rabbitMQ v3.5.7和花v0.9.1運行Django v1.10,並且使用芹菜,rabbitMQ和花都很新穎。在倒計時前重試芹菜任務
有一個函數x()被設置爲在失敗的情況下7天后重試。我們有1000個x的實例在生產中重新排隊。我們已經解決了這個問題,並希望儘快重試這些實例。
有沒有辦法在計劃時間之前強制重試?
,我不得不通過獲取的計劃任務的列表和它們的參數,並要求解決這個問題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)
如果您可以獲得任務列表,則可以在每個列表中調用task.retry(exc=exc)
。 See docs.
嘗試celery.task.control.inspect().reserved()
並查看您是否可以用這種方式過濾任務。 Example here.
你嘗試了很多事情之後,所以得到了這個編號的任務目標,每this answer.
result = MyTask.AsyncResult(task_id)
result.get()
我試過了,但inspect.scheduled()不返回任務對象,但它的字典表示,因此我不能稱之爲task.retry就可以了。 我一直在試圖找到如何從任務ID獲取任務對象,但一直未能找到它。如果您可以共享替代/共享如何從其ID中獲取任務對象,那將是非常好的。 –
@PrakharGupta嘗試'MyTask.AsyncResult()' –