Повторите попытку с задачами обратного вызова celery Http

Я просматриваю задачи обратного вызова http - http://celeryproject.org/docs/userguide/remote-tasks.html в сельдерее. Они работают достаточно хорошо, когда удаленная конечная точка доступна, но когда она недоступна, я бы хотел, чтобы она повторила попытку (в соответствии с политикой повторных попыток) — или даже если удаленная конечная точка вернет ошибку. на данный момент это похоже на ошибку и задача игнорируется.

Любые идеи ?


person Michael Neale    schedule 04.07.2011    source источник


Ответы (1)


Вы должны быть в состоянии определить свою задачу следующим образом:

class RemoteCall(Task):
    default_retry_delay = 30 * 60 # retry in 30 minutes

    def Run(self, arg, **kwargs):
        try:
            res = URL("http://example.com/").get_async(arg)
        except (InvalidResponseError, RemoteExecuteError), exc:
            self.retry([arg], exc=exc, *kwargs)

Это будет продолжать попытки до max_retries раз в 30 минут.

person Doug-W    schedule 04.07.2011
comment
Я могу ошибаться, но get_async не возвращал ошибку, когда конечной точки не было, поэтому он не запускал эту повторную попытку? (Вероятно, я ошибаюсь, все еще не понимаю, куда все идет). Итак, чтобы использовать это - я бы (на клиенте) вызвал RemoteCall().delay() ? - person Michael Neale; 06.07.2011