Python 3.3+faulthandlerфункция
faulthandler.dump_traceback_later()
дамп по таймеру
Заводит сторожевой таймер: если за timeout секунд его не отменили, стек всех потоков записывается в файл.
Синтаксис
faulthandler.dump_traceback_later(timeout, repeat=False, file=sys.stderr, exit=False)
Главный инструмент против зависаний: поставили таймер перед подозрительным местом, отменили после — и при зависании увидите, где именно стоит программа. Повторный вызов не добавляет второй таймер, а заменяет первый. exit=True после дампа завершает процесс через _exit() без сброса буферов и блоков finally — недописанные файлы останутся недописанными. repeat=True печатает стек каждые timeout секунд.
Примеры
import faulthandler, time
with open('hang.txt', 'w') as f:
faulthandler.dump_traceback_later(0.1, file=f)
time.sleep(0.3)
print(open('hang.txt').read().splitlines()[0]) # → Timeout (0:00:00.100000)!
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности