读书人

python线程怎么销毁

发布时间: 2013-06-25 23:45:42 作者: rapoo

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()
看看活动线程的数目

读书人网 >perl python

热点推荐