Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从单独的线程获取堆栈跟踪_Python_Multithreading - Fatal编程技术网

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

在python中从单独的线程获取堆栈跟踪,python,multithreading,Python,Multithreading,我正在编写一个python程序,它使用Tkinter for windows并在多个线程上运行。有时它会冻结,当我停止它时,我不会得到堆栈跟踪。我尝试通过运行带有回溯的单独线程来获取堆栈。print_stack(),但这只打印该线程的堆栈 是否有一种方法可以从所有线程获取堆栈跟踪,或者我需要逐个检查它们 有没有一种好方法可以持续监视堆栈,这样我就可以找出程序没有响应的原因了?因此,我发现最好的方法是将所有线程放入一个try循环,然后当出现异常时,使用回溯打印出错误。我还尝试给我的线程命名,以便它

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

是否有一种方法可以从所有线程获取堆栈跟踪,或者我需要逐个检查它们


有没有一种好方法可以持续监视堆栈,这样我就可以找出程序没有响应的原因了?

因此,我发现最好的方法是将所有线程放入一个try循环,然后当出现异常时,使用
回溯
打印出错误。我还尝试给我的线程命名,以便它们在遇到问题时告诉我它们是谁。下面是一个例子

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")

看一看模块。对于您的特殊情况,我不会像在大多数常见情况下那样设置跟踪,而是设置事后跟踪功能。@brainovergrow我认为这会起作用,但python也崩溃了,所以看起来它在崩溃时会带走pdb和堆栈…嗯,如果是这样,那么还有两个选项-要么(如果在Linux上),用strace连接到你的应用程序,至少获得一些部分信息,或者——这似乎是个更好的主意——逐个禁用应用程序的某些模块,然后找出导致这种行为的原因。或者在每个人都为自己的应用程序编写测试时运行单元测试,对吗?;)