Сельдерей Задача, которая общается с Twitter - PullRequest
3 голосов
/ 17 марта 2011

Каков правильный подход при написании задач сельдерея, которые взаимодействуют со службой, у которой есть ограничения скорости, а иногда отсутствуют (не отвечают) в течение длительного периода времени?

Нужно ли использовать повторную попытку задачи?Что если сервису не хватает слишком много времени?Есть ли способ сохранить эти задачи для последующего выполнения после длительного периода времени?

Что, если это подзадача в длинной задаче?

1 Ответ

2 голосов
/ 17 марта 2011

Во-первых, я предлагаю вам установить тайм-аут сокета, чтобы избежать длительного ожидания ответа.Чем вы можете перехватить сокет 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 = []Приятной особенностью является также группа задач, которая позволяет запускать различные задачи, а после завершения вы можете заняться чем-то другим в вашем рабочем процессе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...