2011-09-15 43 views
1

有人知道這個錯誤的含義嗎?致命的Python錯誤:PyEval_RestoreThread:NULL tstate

Fatal Python error: PyEval_RestoreThread: NULL tstate 

在我的應用程序中,當我銷燬主窗口時,會打印此錯誤。我正在使用多個線程同時運行不同的作業。

我真的沒有任何IDEIA這是什麼..

如果有人住過了同樣的問題,請幫助我..

下面是展示如何重現此錯誤代碼。 (我試圖讓我說最小代碼)

#!/usr/bin/env python 

import gtk 
import threading 
import sys 

class Test(threading.Thread): 
    """A subclass of threading.Thread, with a kill() method.""" 

    def __init__(self, *args, **keywords): 
     threading.Thread.__init__(self, *args, **keywords) 
     gtk.gdk.threads_init() 
     self.killed = False 

    def start(self): 
     """Start the thread.""" 
     self.__run_backup = self.run 
     self.run = self.__run # Force the Thread to install our trace. 
     threading.Thread.start(self) 

    def __run(self): 
     """Hacked run function, which installs the trace.""" 
     sys.settrace(self.globaltrace) 
     self.__run_backup() 
     self.run = self.__run_backup 

    def globaltrace(self, frame, why, arg): 
     if why == 'call': 
      return self.localtrace 
     else: 
      return None 

    def localtrace(self, frame, why, arg): 
     if self.killed: 
      if why == 'line': 
       raise SystemExit() 
       return self.localtrace 

    def kill(self): 
     self.killed = True 

class Window(gtk.Window): 
    """Main window""" 
    def __init__(self): 
     """Create a main window and all your children""" 
     super(Window, self).__init__() 
     self.connect('destroy', gtk.main_quit) 
     button = gtk.Button("Click and after, close window") 
     button.connect("clicked", self.on_item_run) 
     self.add(button) 
     self.show_all() 

    def on_item_run(self, widget): 
     t = Test() 
     t.start() 

if __name__ == "__main__": 
    window = Window() 

    gtk.gdk.threads_enter() 
    gtk.main() 
    gtk.gdk.threads_leave() 

非常感謝..

+0

主窗口?你用什麼來創建主窗口?代碼示例在這裏讚賞。 –

+0

對不起,我仍然試圖寫一個簡單的小代碼粘貼在這裏.. – JonatasTeixeira

回答

1

什麼版本的GTK您使用的是? This link似乎表明這是一個在2.0.1中修復的線程錯誤。