Отключение sys.settrace необходимо или нет

Бэкенд REST-сервис, с которым я работаю, написан на python/django, и иногда сервер падает из-за одного запроса, не сообщая об исключении, т.е. я даже не могу знать, на какой строке он был в последний раз. В приложении нет никаких функций входа/выхода из журнала, которые можно было бы включить в конфигурации окружения, поэтому я придумал альтернативу - включить sys.settrace на основе пользовательского заголовка запроса. Итак, я написал что-то вроде этого в одном из промежуточных модулей запроса:

def debug_tracer(frame, event, arg = None):

    code = frame.f_code
    func_name = code.co_name
    line_no = frame.f_lineno
  
    print(f"A {event} encountered in \
    {func_name}() at line number {line_no} ")
  
    return debug_tracer

if.requests.headers.get("HTTP_TRACEBACK"):
    sys.settrace(debug_tracer)

Для развертывания одного сервера это выглядит следующим образом:

Запрос при t=1 без заголовка traceback -> Обычные журналы запросов-ответов

Запрос на t=2 с заголовком traceback -> Каждая строка выполнения попадает в журналы вместе с журналами запросов-ответов

Запрос на t=3 без заголовка traceback -> Обычные журналы запросов-ответов

Сейчас это работает нормально, т.е. каждый раз, когда я передаю заголовок с ключом traceback, логи для этого конкретного запроса содержат детали вызовов/возвратов/строк. Но я не могу понять, что без выполнения sys.settrace(None), т.е. активного отключения предыдущей функции debug_tracer для sys.settrace; она все еще работает как ожидалось и не влияет на другие последующие http запросы. Мой вопрос заключается в том, почему это не заставляет другие запросы также следовать той же самой конфигурации sys.settrace?

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