2011-09-15 62 views
1

誰かがこのエラーの意味を知っていますか?致命的なPythonエラー:PyEval_RestoreThread:NULL tstate

Fatal Python error: PyEval_RestoreThread: NULL tstate 

私のアプリケーションでは、メインウィンドウを破壊するとこのエラーが表示されます。私は同じ時間に異なるジョブを実行するために複数のスレッドを使用しています。

私は本当にこれが何であるかを任意のideiaを持っていけない...

誰かがこれまでと同じ問題が住んでいた場合は、私を助けてください..以下

は、このエラーを再現する方法を示すためのコードです。使用しているGTKのおかげでたくさんの..

+0

メインウィンドウ?そのメインウィンドウを作成するのにあなたは何を使用しますか?コードサンプルはここで評価されています。 –

+0

申し訳ありませんが、私はまだここに貼り付ける簡単で小さなコードを書こうとしていました。 – JonatasTeixeira

答えて

1

どのバージョン

#!/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() 

(私は私ができる最小のコードを作ってみましたか)? This linkは、2.0.1で修正されたスレッドのバグであると思われます。