python在线程之间传递异常的方法

发布时间:2019-12-21编辑:脚本学堂
python在线程之间传递异常,搞了一个折中的办法,虽然效果一般,但终归是可以抓到东西了。感兴趣的朋友,可以参考下。

python在线程之间传递异常,搞了一个折中的办法,虽然效果一般,但终归是可以抓到东西了。
感兴趣的朋友,可以参考下。
 

复制代码 代码如下:

#coding:utf-8
 
import time
import threading
import Queue
 
rlock = threading.RLock()

class MThread(threading.Thread):

    def __init__(self, oputque, *args, **kd_args):
        super(MThread, self).__init__(*args, **kd_args)
        self.oputque = oputque

    def _run(self):
        n = self.getName().replace('-', '_')
        for i in range(5):
            time.sleep(1)
            with rlock:
                print n, i
        raise Exception("Bad thing")

    def run(self):
        try:
            self._run()
        except Exception, err:          
            self.oputque.put(err)
 
def main():
    q = Queue.Queue()
    t = MThread(q)
 
    t.start()
    t.join()
    try:
        er = q.get_nowait()
        with rlock:
            print str(er)
    except Queue.Empty:
        pass
    print "Done"

if __name__ == '__main__':
    main()