Задача Celery .delay не имеет информации о трассе стека из исходного класса - PullRequest
0 голосов
/ 01 июня 2019

Я работаю над асинхронным ведением журнала для приложения django, где использую задачу сельдерея для задержки логики.

Я установил задание на основе класса сельдерея.

class AsyncLogging(Task):
    ignore_result = True
    name = 'cx_plan.tasks.logging_async'

    def run(self, message):
        co_class, co_funcname, f_lineno = self.find_caller()
        logger = logging.getLogger(__name__)
        logger.info("[{} - {}:{}] - {}".format(co_class.__name__, co_funcname, f_lineno, message))

    def find_caller(self):
        stack = inspect.stack()
        return stack[2][0].f_locals["self"].__class__, stack[2][0].f_code.co_name, stack[2][0].f_lineno


app.register_task(AsyncLogging())

При звонке на номер:

AsyncLogging().run("Message is in correct format: dict")

Я могу найти правильный номер стека для исходного источника, но при использовании .delay вместо .run это больше не то, что ожидалось, поскольку используется задержка , но проблема в том, что за пределами этой асинхронной задачи нет трассировки стека.

Трассировка стека от .delay:

[INFO] - [cx_plan.tasks] - <class 'cx_plan.tasks.AsyncLogging'> find_caller 150
celery_1      | [INFO] - [cx_plan.tasks] - <class 'cx_plan.tasks.AsyncLogging'> run 142
celery_1      | [INFO] - [cx_plan.tasks] - <class 'cx_plan.tasks.AsyncLogging'> __protected_call__ 648

Есть ли способ получить трассировку стека вне этой асинхронной задачи, чтобы получить необходимую информацию. Любая помощь будет принята с благодарностью. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...