スレッドの境界を越えて例外を渡す必要があります。Pythonのスレッド間で例外を渡す方法
私はpythonをスレッドセーフな呼び出しpost_event(callable)を持った非スレッドセーフなアプリケーションに埋め込みました。これはメインスレッドからcallableを呼び出します。
私はpygtk guiを別のスレッドで実行しているので、ボタンをクリックするとpost_eventでイベントをポストし、処理を続行するのを待っています。しかし、呼び出し先が例外をスローしたかどうかを知るには呼び出し元が必要です。私はトレースバックについてあまり心配していません、ただ例外そのものです。
私のコードは、おおよそ次のとおりです。
class Callback():
def __init__(self,func,*args):
self.func=func
self.args=args
self.event=threading.Event()
self.result=None
self.exception=None
def __call__(self):
gtk.gdk.threads_enter()
try:
self.result=self.func(*self.args)
except:
#what do I do here? How do I store the exception?
pass
finally:
gtk.gdk.threads_leave()
self.event.set()
def post(self):
post_event(self)
gtk.gdk.threads_leave()
self.event.wait()
gtk.gdk.threads_enter()
if self.exception:
raise self.exception
return self.result
すべてのヘルプ感謝、感謝。
私はまさに私が後にしたこと、ありがとう。 通常はキューなどを使用しますが、スクリプト内でいつでも1つだけ実行する必要があるため、ホイールを再発明しています。私がgtkスレッドで何か別のアクションをとる前の結果です。私は基本的に2つのスレッドで1つのスレッドを偽造しようとしています。その迷惑なが、それはうまく動作しているようだ。 – DaedalusFall