Функция Celery 'update_status' не работает

Я использую celery и django-celery-results в моем Django приложении. Мои результаты celery хранятся в бэкенде, и вот как выглядит celery.py.

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "shoonya_backend.settings")

# Define celery app and settings
celery_app = Celery(
    "shoonya_backend",
    result_backend="django-db",
    accept_content=["application/json"],
    result_serializer="json",
    task_serializer="json",
)

celery_app.config_from_object("django.conf:settings", namespace="CELERY")
celery_app.autodiscover_tasks()

Я пытаюсь обновить состояние задачи из функции celery, если я получаю исключение, как показано ниже.

try: 
    result = resource.import_data(imported_data, raise_errors=True)



    # If validation checks fail, raise the Exception
except Exception as e:

    self.update_state(
        state=states.FAILURE,
        meta={
            "exc_type": type(e).__name__,
            "exc_message": traceback.format_exc().split("\n"),
        },
    )

Следующая команда не приводит ни к каким изменениям в таблице TaskResult даже при возникновении исключения, а Задача всегда успешна.

Для того чтобы иметь состояние FAILURE, вам нужно поднять исключение, иначе у вас всегда будет состояние SUCCESS результата. Здесь вы не поднимаете исключение, вы просто обновляете состояние задачи, что не одно и то же.

Даже если вы обновляете состояние вашей задачи до FAILURE, поскольку вы затем завершаете выполнение задачи, не вызвав никакой ошибки, оно мгновенно изменяется на SUCCESS.

Но поднятие исключения завершит выполнение на нужном вам FAILURE состоянии.

У вас должно быть что-то вроде этого :

try: 
    result = resource.import_data(imported_data, raise_errors=True)

except Exception as e:
    raise e # In your backend you'll get a FAILURE state and the traceback
Вернуться на верх