Проверка Документация Celery о задачах - основы задокументированы очень хорошо.
Если задача не выполнена или была прервана - задача будет иметь статус states.FAILURE
. Он не будет перепробован, если не будет специально закодирован. Если регистрация настроена правильно - вы можете увидеть сообщения об исключениях в журналах в случае тайм-аутов или других исключений кода.
Когда задача сельдерея TIME_LIMIT превышена - задача сразу же прекращается:
Рабочий, обрабатывающий задачу, будет убит и заменен новым.
Также с сообщением будет вызвано исключение TimeLimitExceeded
например, Task handler raised error: "TimeLimitExceeded(2700)"
Если установлен Celery SOFT_TIME_LIMIT , он меньше TIME_LIMIT
и превышен - чем SoftTimeLimitExceeded
, будет сгенерировано исключение, позволяющее его нужно отловить в задаче и выполнить действия по очистке.
Когда работник получает сообщение (задача) из очереди посредника - брокеру необходимо знать, что сообщение было успешно использовано. Для подтверждения успешного использования сообщения работник подтверждает (ACK) брокеру . До тех пор, пока сообщение не будет подтверждено, оно не будет удалено из брокера, но также недоступно для использования («невидимо»). При отсутствии подтверждения - сообщение будет повторно доставлено обратно в очередь брокера, снова доступную для потребления.
Реабилитация сообщений о неподтвержденных сообщениях c зависит от брокера:
Брокер AMQP (RabbitMQ) - отслеживает состояние соединения с работником, а в случае потери соединения - возвращает сообщение обратно в очередь.
Брокер Redis или SQS имеет собственный тайм-аут после чего сообщение будет повторно доставлено в очередь посредника, если не ACKed.
По умолчанию работник сельдерея подтверждает сообщение прямо в начале задачи.
Если установлено значение ACKS_LATE - работник признается брокеру только после успешного выполнения задания.
Можно RETRY задача, перехватывая исключение в задаче и отправляя ту же задачу обратно в брокер для повторного выполнения - тогда эта же задача с тем же идентификатором будет поставлена в очередь в брокере. Обратный отсчет * Опция 1076 * позволяет указать задержку перед повторной попыткой выполнения задачи.
Можно выполнить выполнение задачи Celery и другие параметры глобально в settings.py
или для задачи в качестве аргументов .
Рекомендуемый способ разработки задач / logi c с учетом того, что такие события должны быть полностью git, и смотрите они нормальные (но на самом деле не ожидаются) когда-нибудь произойдут и будут готовы:
- задачи могут завершиться ошибкой ( следующая та же задача может выполнить обе задачи или проверки, которые указывают c работа не была выполнена и перезапустить задачу )
- та же задача может быть запущена снова ( идемпотентность )
- аналогичные задачи могут выполняться одновременно ( блокировка )