首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Python怎么停止一个线程呢?小弟我这种方法对不对啊

2012-06-22 
Python如何停止一个线程呢???我这种方法对不对啊???我现在的方法如下:线程定义如下:Python code#Transmit

Python如何停止一个线程呢???我这种方法对不对啊???
我现在的方法如下:

线程定义如下:

Python code
#Transmit and Reciveclass TrThread(Thread):    def run(self):        self.doRecv =True        while self.doRecv==True:            rbuf = COM.read(1)          #read one, with timeout            if rbuf:                n = COM.inWaiting()                if n:                    rbuf = rbuf+COM.read(n)                    RQueue.put(rbuf)                    root.event_generate("<<COMRxRdy>>",when='tail')            if TQueue:                COM.write(TQueue.get())            time.sleep(0.005)    def stop(self):        self.doRecv = False


在想要停止这个线程的地方做如下操作:
Python code
trcv=TrThread()trcv.setDaemon(True).........trcv.stop()trcv.join()


但是我发现程序会死在trcv.join()调用的地方,,,请问这是为什么呢???应该如何解决呢???

[解决办法]
是不是等待串口数据导致线程自己sleep而没有机会执行,主线程的join没法继续,方法就是这样的,换成这个能执行
Python code
from threading import *import timeclass MyThread(Thread):    def run (self):        self.ifdo = True;        while self.ifdo:            print 'I am running...'            time.sleep(0.1)    def stop (self):        print 'I will stop it...'        self.ifdo = False;tr = MyThread()tr.setDaemon(True)tr.start()time.sleep(1)tr.stop()tr.join()
[解决办法]
这样就更直观了
Python code
from threading import *import timeclass MyThread(Thread):    def run (self):        self.ifdo = True;        while self.ifdo:            print 'I am running...'            time.sleep(2)    def stop (self):        print 'I am stopping it...'        self.ifdo = False;tr = MyThread()tr.setDaemon(True)tr.start()print 'I will stop it...'time.sleep(5)tr.stop()tr.join()
[解决办法]
你的线程有stop方法,setDaemon(True)和join()都可以免了吧...

热点排行