如何在python中的线程之间传递异常

Dae*_*all 7 python multithreading exception

我需要跨线程边界传递异常.

我使用嵌入非线程安全的应用程序,它具有一个线程调用安全,post_event(赎回),要求从主线程调用蟒蛇.

我在一个单独的线程中运行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
Run Code Online (Sandbox Code Playgroud)

任何帮助表示感谢,谢谢.

Ale*_*lli 13

#我该怎么办?如何存储例外?

使用sys.exc_info()[:2],请参阅此维基

线程之间进行通信的最佳方式是Queue.让主线程实例化一个Queue.Queue实例并将其传递给subthreads; 当一个subthread有东西要回传给它.put在那个队列上使用的master (例如一个带有线程id的元组,异常类型,异常值 - 或者,其他有用的信息,不一定是异常相关的,只需要确保第一项元组标识信息的种类;-).主人可以.get在需要时返回这些信息单元,并提供各种同步选择等.