задачи сельдерея: обновить состояние после блока try & exclude

У меня есть celery 4.1.0, django 1.11.11, rabbitMQ и Redis для результатов.

@shared_task(bind=True)
    def one_task(self):
        try:
            ...
            some db stuff here
            ...
        except BaseException as error:
            self.update_state(state='FAILURE', 
                              meta={'notes': 'some notes'})
            logger.error('Error Message ', exc_info=True, 
                         extra={'error': error})

Итак, когда мой код сталкивается с блоком, кроме блока, self.update_state не работает, но работает регистратор... На самом деле, я не уверен, что

@shared_task(bin=True)

это правильно...

Что я хочу сделать, это поймать исключения (через блоки try и кроме) моего кода Python, изменить состояния и завершить задачи вручную. Итак, любой совет/помощь?


person Miknotauro    schedule 13.03.2018    source источник
comment
Что вы имеете в виду, говоря, что это не работает?   -  person GwynBleidD    schedule 13.03.2018
comment
Что ж, когда я смотрю на панель управления цветами, моя задача завершается успешно:/   -  person Miknotauro    schedule 14.03.2018


Ответы (1)


Celery установит статус успеха для каждой завершенной задачи без исключения. И вы перехватываете это исключение, не возвращая его обратно.

К сожалению, сброс не поможет, потому что сельдерей переведет задачу в состояние сбоя со своим собственным сообщением об ошибке.

Единственным решением этой проблемы является установка параметра ignore_result=True для этой задачи, поэтому сельдерей не будет управлять состоянием этой задачи, но документация по сельдерею предполагает, что у него могут быть другие побочные эффекты.

person GwynBleidD    schedule 14.03.2018