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

python线程怎么销毁

2013-06-25 
python线程如何销毁大家好,请教个python线程销毁的问题 伪代码大概如下:class UDPListenThread(threading.

python线程如何销毁
大家好,请教个python线程销毁的问题 伪代码大概如下:


class UDPListenThread(threading.Thread):
    def __init__(self,window,sockets,isav_or_feedback):
        threading.Thread.__init__(self)
        self.window = window
        self.socket = sockets
        self.timeToQuit = threading.Event()
        self.timeToQuit.clear()
        self.data=''
        self.udp_addr = ''
        self.isav_or_feedback = isav_or_feedback
    
    def run(self):      
        while True:
            if self.isav_or_feedback == 2 and self.window.sentFeedbackResponse == 1:
                    sleep(1)
            else:
                data,addr = self.socket.recvfrom(2048)
                self.udp_addr = addr
                if not data:
                    break
                else:
                    wx.CallAfter(self.window.SetUdpClientAddress,addr)      
                if self.isav_or_feedback == 1 and self.window.sentAVApplyResponse == 1:
                    self.sendAVStream()            
        self.socket.close()
            
    def stop(self):
        print 'close UDP socket'
        self.socket.close()
        self.timeToQuit.set()
             
    def sendAVStream(self):
        file_object = open('record.ts', 'rb')
        length = 0
        i = 0
        a_length = 0
        try:
            while True:
                chunk = file_object.read(940)
                if not chunk:


                    file_object.seek(0)
                    i = 0
                    continue
                packet = struct.pack(str(dl)+'s',pack_data)
                try:
                    self.socket.sendto(chunk , self.udp_addr)
                except:
    break
                sleep(0.001)
        finally:
            file_object.close( )


大概作用是一个套接字接收消息,如果遇到特定消息解析后 就调用sendAVStream这个函数循环播放一个ts文件
后面我在别的地方调用thread的stop函数时候感觉线程并没有销毁,数据还在播发。。
我觉得既然用了 self.socket.close()后套接字就已经关闭了,那么self.socket.sendto(chunk , self.udp_addr)就应该失败了,至少应该不再发送数据才对,莫非这个socket根本就没被关闭?
然后想请教下UDPListenThread这个线程应该如何关闭呢?是不是self.timeToQuit.set()这个函数?
谢谢。。
[解决办法]
sendAVStream函数里缩进有问题,不是能跑的代码,漏贴了啥吧。貌似try...except太随意可能死循环了...
[解决办法]
threading.activeCount()
看看活动线程的数目

热点排行