网上找了一堆,都是乌七八糟,没有几个认真写过关于faulthandler的使用。
启动带一堆这个启动:
In [1]: import test
In [2]: test.main()
In [3]: import faulthandler
In [4]: faulthandler.dump_traceback()
无聊不?你线上环境都是这么启动的?这么几句代码还需要去待线程干嘛。。。。。。
以下属于我尝试出来的正确姿势:
#main.py
import faulthandler
import signal
app = http_provide.app
if __name__ == '__main__':
faulthandler.enable()
file = open("./tt.txt", "w+")#打印线程输出文件
faulthandler.register(signal.SIGUSR1,file=file)#通过signal建立关系
app.run(threaded=False,host="0.0.0.0", debug=False, port=8080)
启动: python -Xfaulthandler main.py
打印线程方式,通过向进程发送 USR1 信号来获取运行中进程的 traceback 信息:
kill -s USR1 pid
目前还没有尝试出gunicorn + faulthandler的启动方式,等后续有再更新,欢迎大家补充或者拍砖