7
我需要跨線程邊界傳遞異常。我如何通過Python中的線程之間的異常
我使用嵌入非線程安全的應用程序,它具有一個線程調用安全,post_event(贖回),要求從主線程調用蟒蛇。
我運行在一個單獨的線程一個GUI 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
讚賞任何幫助,謝謝。
正是我之後,謝謝。 通常我會用隊列等,但我「重新發明輪子」,因爲只有一件事應該在我的腳本中的任何一個時間運行,我想的是,應用程序的線程中執行完成,給的東西我在gtk線程採取任何進一步的行動之前得到的結果。我基本上試圖用兩個線程僞造單線程。它令人討厭,但它似乎工作正常。 – DaedalusFall 2009-06-01 20:54:06