我需要跨线程边界传递异常。
我正在使用嵌入非线程安全应用程序的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
感谢任何帮助,谢谢。