Невозможно сохранить модель внутри исключения задачи celery?

У меня есть цепочка задач celery для управления общением со старым API на основе опроса XML, поэтому мне нужно иметь возможность сделать один вызов удаленного API для каждой задачи и передать результаты следующей задаче. Некоторые из этих API выдают странные ошибки, поэтому я пытаюсь придумать общий способ отлова и проверки того, что все мои ошибки попадают в базу данных, чтобы у меня был аудиторский след того, что произошло.

Независимо от того, что я пробовал, когда я пытаюсь записать в базу данных из блока с пойманным исключением, она отказывается сохранять его. Я предполагаю, что что-то происходит в Django, но я не могу найти в документации никаких объяснений. Я знаю, что отлавливаю ошибку, потому что вижу записи в журнале

Я пытаюсь сделать что-то вроде следующего:

import traceback
import sys
import logging

log = logging.getLogger('daniTest')

@celery_app.task()
def dmtest(d:dict):
    log.info(f'DM: Test: dict: {d}')
    try:
        raise Exception('Just a test.')
    except Exception as e:
        exc_info = sys.exc_info()
        errStr = ''.join(traceback.format_exception(*exc_info))
        log.error(errStr)
        # d has a jobId key I can use to link to DB:
        dbJob = MyModel.objects.get(job_id=d['jobId'])
        dbJob.error_messages = errStr
        dbJob.save()

Есть ли способ заставить это работать? Спасибо.

Вернуться на верх