Вопрос:
Я хотел сельдерей, чтобы поймать исключения и записать их в лог-файл, а не по-видимому, их глотании ...
В настоящее время верхняя ответ здесь так для целей профессионального решения. Многие разработчики python будут рассматривать скрытую ошибку при каждом случае на красном флаге. Разумное отвращение к этому было хорошо сформулировано в комментарии:
Держись, я ожидаю, что буду что-то в журнале работника, по крайней мере, для каждой задачи, которая не ...
Сельдерей действительно ломает исключение, он просто не делает то, что OP хочет от него сделать (он хранит его в исходном файле результата). Следующий пример - лучший интернет, который может предложить по этой проблеме. Это немного датировано, но обратите внимание на количество вилок и звезд.
https://gist.github.com/darklow/c70a8d1147f05be877c3
Суть принимает случай отказа и делать что-то обычай с ним. Это надмножество проблемы OP. Вот как настроить решение в gist для регистрации исключения.
import logging
logger = logging.getLogger('your.desired.logger')
class LogErrorsTask(Task):
def on_failure(self, exc, task_id, args, kwargs, einfo):
logger.exception('Celery task failure!!!1', exc_info=exc)
super(LogErrorsTask, self).on_failure(exc, task_id, args, kwargs, einfo)
Вы все равно должны убедиться, что все ваши задачи наследуют от этого класса задач, а суть показывает, как это сделать, если вы используете @task
декоратор (с base=LogErrorsTask
kwarg).
Преимущество этого решения состоит в том, чтобы не встраивать ваш код в какие-либо дополнительные контексты, отличные от try. Это согласуется с кодом кода отказа, который сельдерей уже использует.
Что хотят от сельдерея? Я не мог сбой, как настольное приложение. Вы можете использовать два простых способа. 1. Используйте бэкэнда результата и отметьте задачу как падающую. 2. Заверните весь свой код в сельдерее, чтобы попытаться исключить. – Rustem
@Rustem Я бы хотел, чтобы сельдерей поймал исключения и записал их в файл журнала, вместо того, чтобы, по-видимому, проглотить их ... –