我正在尝试异步使用 Web 服务,因为它最多需要 45 秒才能返回。不幸的是,此 Web 服务也有些不可靠,并且可能会引发错误。我已经设置django-celery
并执行了我的任务,它工作正常,直到任务失败超出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 返回给客户端,我正在检查Result
通过 AJAX 的内容,它永远不会进入完全失败f
状态。
所以问题是:当 Celery 任务超出时,如何更新我的数据库max_retries
?