Получение сообщения об исключении из сбойного задания - PullRequest
0 голосов
/ 08 октября 2018

Я выполняю задание, используя rq с q.enqueue_call(...), и в этом задании я поднимаю исключение с raise Exception('URL not found')

Мне было интересно, как можно получить сообщение об исключении из этого задания ('URL не найден ') после сбоя задания.

Я могу получить трассировку стека с помощью

print(get_failed_queue(connection=conn).jobs[-1].exc_info)

, хотя не могу получить короткое сообщение об ошибкесам.

Я думал, job.result (после получения работы с job = Job.fetch(job_key, connection=conn)) будет работать, хотя это возвращает None

1 Ответ

0 голосов
/ 25 марта 2019

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

Функции Python могут иметь возвращаемые значения, поэтому задания могут иметь и их.Если задание возвращает ненулевое возвращаемое значение, работник запишет это возвращаемое значение обратно в хэш Redis задания под ключом результата.Сам по себе хэш Redis задания истекает через 500 секунд по умолчанию после его завершения.

В файле exc_info содержится следующее:

Когда в задании возникает исключение, он перехватывается работником, сериализуется и сохраняется под ключом exc_info хэша Redis задания.Ссылка на задание помещается в очередь с ошибками.

Лучший способ найти сообщение об ошибке - взять exc_info и проанализировать его - обычно на raise или что-то в этом роде.- а затем получить последнее значение из разделения.Примерно так возвращается последняя возникшая ошибка:

job.__dict__["exc_info"].split("raise")[-1]
...