2009-06-12 106 views

回答

13

如前所述,围绕Thread类的包装可以捕获该状态。这是一个例子。

>>> from threading import Thread 
>>> class MyThread(Thread): 
    def run(self): 
     try: 
      Thread.run(self) 
     except Exception as self.err: 
      pass # or raise 
     else: 
      self.err = None 


>>> mt = MyThread(target=divmod, args=(3, 2)) 
>>> mt.start() 
>>> mt.join() 
>>> mt.err 
>>> mt = MyThread(target=divmod, args=(3, 0)) 
>>> mt.start() 
>>> mt.join() 
>>> mt.err 
ZeroDivisionError('integer division or modulo by zero',) 
-1

如果成功,您可以将某些全局变量设置为0,如果出现异常,则可以将其设置为非零。这是一个非常标准的惯例。

但是,您需要使用互斥锁或信号量来保护此变量。或者你可以确保只有一个线程会写入,而其他线程只会读取它。

+0

0对于成功来说可能是一个非常标准的约定,但是在肉解释器上不会布尔型“成功”会更容易一些吗? – 2009-06-12 13:38:12

0

让你的线程函数捕获异常。 (你可以用一个简单的包装函数来做到这一点,它只需调用try中的旧线程函数... excepttry ... except ... else块)。那么问题就变成了“如何从一个线程传递信息到另一个线程”,我想你已经知道如何做到这一点。