Мне нужно передать исключения через границу потока.
Я использую Python, встроенный в не поточно-ориентированное приложение, которое имеет один потоко-безопасный вызов post_event (callable), который вызывает callable из своего основного потока.
Я запускаю графический интерфейс pygtk в отдельном потоке, поэтому, когда нажимается кнопка, я публикую событие с 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
Любая помощь приветствуется, спасибо.