Python 3.3+faulthandlerфункция
faulthandler.dump_traceback()
дамп стека
Сразу записывает в файл стек вызовов всех потоков (или только текущего) — без исключения и без остановки программы.
Синтаксис
faulthandler.dump_traceback(file=sys.stderr, all_threads=True)
Пишет прямо в файловый дескриптор, минуя буфер Python: при выводе в sys.stdout строки print() могут оказаться после дампа, поэтому перед вызовом делают sys.stdout.flush(). Формат беднее, чем у traceback: только файл, строка и имя функции, без исходного текста, зато безопасен там, где интерпретатор уже в плохом состоянии. При all_threads=True первая строка содержит идентификатор потока.
Примеры
import faulthandler
def work():
with open('stack.txt', 'w') as f:
faulthandler.dump_traceback(file=f, all_threads=False)
work()
text = open('stack.txt').read()
print(text.splitlines()[0]) # → Stack (most recent call first):
print('in work' in text) # → True
import faulthandler, sys
print('до дампа')
sys.stdout.flush()
faulthandler.dump_traceback(file=sys.stdout, all_threads=False) # → ? путь к файлу примера
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности