在Python线程中处理信号
我有一个用Python写的多线程应用程序,每当我通过Ctrl+C或者有时候用kill命令来中断它时,这个应用就会卡住。此时会显示一个线程的堆栈跟踪,但应用程序仍然在前台运行,我通常需要用Ctrl+Z把它放到后台,然后再尝试结束它。
在一个多线程的应用程序中,正确处理信号和键盘中断的方式是什么呢?
4 个回答
5
CPython 线程:中断 这篇文章讲的是在 Python 线程中信号会发生什么,以及解决你问题的不同方法。值得一读。
5
我解决这个问题的方法是做了一个模块,这个模块可以保存一个线程的列表。这个模块还有一个方法,可以结束列表中的每一个线程。当收到
16
如果你在启动每个线程之前设置 newthread.daemon = True
,那么当主线程结束时,这些线程会自动被杀掉。虽然这并不是你具体问的问题,但根据你描述的情况,知道这一点可能会对你有帮助。