我試圖異步使用Web服務,因爲它需要長達45秒才能返回。不幸的是,這個網絡服務也有點不可靠,可能會引發錯誤。我已經設置了django-celery
並執行了我的任務,這可以正常工作,直到任務失敗超出max_retries
。從任務恢復失敗超出max_retries
這是我到目前爲止有:
@task(default_retry_delay=5, max_retries=10)
def request(xml):
try:
server = Client('https://www.whatever.net/RealTimeService.asmx?wsdl')
xml = server.service.RunRealTimeXML(
username=settings.WS_USERNAME,
password=settings.WS_PASSWORD,
xml=xml
)
except Exception, e:
result = Result(celery_id=request.request.id, details=e.reason, status="i")
result.save()
try:
return request.retry(exc=e)
except MaxRetriesExceededError, e:
result = Result(celery_id=request.request.id, details="Max Retries Exceeded", status="f")
result.save()
raise
result = Result(celery_id=request.request.id, details=xml, status="s")
result.save()
return result
不幸的是,MaxRetriesExceededError
沒有被retry()
拋出,所以我不知道如何處理這種任務的失敗。 Django已經將HTML返回給客戶端,並且我正在通過AJAX檢查Result
的內容,該AJAX永遠不會完全失敗f
狀態。
所以問題是:當芹菜任務超過max_retries
時,如何更新我的數據庫?
由於鏈接顯然已經過時了,現在,[這裏是一個新的](http://celery.readthedocs.org/en/latest/reference/celery.app.task.html?highlight=after_return#celery.app.task.Task.after_return) – rschwieb
謝謝,回答更新。 –