Я пытаюсь асинхронно использовать веб-службу, поскольку для возврата требуется до 45 секунд.К сожалению, этот веб-сервис также ненадежен и может выдавать ошибки.Я настроил 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
?