Во-первых, я предлагаю вам установить тайм-аут сокета, чтобы избежать длительного ожидания ответа.Чем вы можете перехватить сокет TimeOutException и в этом особом случае повторить попытку с большим количеством времени, например, 15 минут.В любом случае обычно я использую incrementalRetry с процентным приращением, это будет увеличивать время при каждой повторной попытке задачи, это полезно при написании задачи, которая зависит от внешних служб, которые могут быть доступны в течение длительного времени.Вы можете задать для задачи большое количество повторов, например, 50, а затем установить стандартное время повторения, используя переменную
#20 seconds
self.default_retry_delay = 20
после того, как вы сможете реализовать такой метод для своей задачи
def incrementalRetry(self, exc, perc = 20, args = None):
"""By default the retry delay is increased by 20 percent"""
if args:
self.request.args = args
delay = self.default_retry_delay
if self.request.kwargs.has_key('retry_deleay'):
delay = self.request.kwargs['retry_deleay']
retry_delay = delay+round((delay*perc)/100,2)
#print "delay"+str(retry_delay)
self.retry(self.request.args,
self.request.kwargs.update({'retry_deleay':retry_delay}),
exc=exc,countdown=retry_delay, max_retries=self.max_retries)
Что, если это подзадача в длинной задаче?
Если вам не нужен результат, вы можете запустить его в асинхронном режиме с помощью task.delay (args = []Приятной особенностью является также группа задач, которая позволяет запускать различные задачи, а после завершения вы можете заняться чем-то другим в вашем рабочем процессе.