从python中的单独线程获取堆栈跟踪

时间:2015-03-01 20:59:30

标签: python multithreading

我正在编写一个python程序,它使用Tkinter for windows并在多个线程上运行。偶尔它会冻结,当我停止它时,我不会得到堆栈跟踪。我尝试通过运行带traceback.print_stack()的单独线程来获取堆栈,但这只打印该线程的堆栈。

我有办法从所有线程获取堆栈跟踪,还是需要逐个检查它们?

是否有一种很好的方法可以持续监控堆栈,以便我可以弄清楚为什么我的程序没有响应?

1 个答案:

答案 0 :(得分:0)

所以我发现做的最好的事情是将所有线程放在try循环中,然后当发生异常时使用traceback打印出错误。我也尝试给我的线程名称,以便他们在遇到问题时告诉我他们是谁。下面是一个例子。

import traceback
class mt_thread:
    def __init__(self,name):
        self.name=name
        thread.start_new_thread(self.thread_code,())

    def thread_code(self):
        try:
            "CODE HERE"
        except:
            print self.name,"ERROR"
            traceback.print_exc()

new_thread=my_thread("thread_1")