遇到 Python 进程卡住或收到致命信号时,标准库的 faulthandler 能把线程栈打出来,排查起来比只看一行异常更有用。环境:Python 3.8+。
最简单的用法是给脚本加启动参数:
python -X faulthandler app.py
也可以在代码里开启,并把输出写到文件:
import faulthandler
with open("fault.log", "w") as log:
faulthandler.enable(file=log, all_threads=True)
run_app()
如果主要想抓住进程长时间没响应的情况,可以设置超时转储:
faulthandler.dump_traceback_later(30, repeat=True)
这个调用会每 30 秒打印一次所有线程的栈,恢复后记得用 faulthandler.cancel_dump_traceback_later() 取消。它只记录 Python 层的 traceback,不能替代 native debugger,不过查死锁、阻塞 I/O 这类问题时挺顺手。