为了在python中实现一个简单的协议,我使用了一个线程来监视接收者发送的确认。为此,我在函数中使用了一个线程
def ackListener(self):
while self.waitingforack:
ack = self.socket_agent.recv(4)
...
exit()
其中self.waitingforack
是一个布尔值,当我收到对我发送的每封邮件的确认时,我设置为False
。
问题是我的代码在self.socket_agent.recv(4)
操作时阻塞,waitingforack
的值修改太晚了
当我不再等待ack时,有没有办法强制Thread终止?
谢谢
答案 0 :(得分:3)
请记住,像recv这样的操作在你的情况下是阻塞操作。 因此,除非您已收到数据,否则调用此函数块。
有两种方法可以解决这个问题:
使套接字无阻塞
socket.setblocking(0)
设置超时值 见:http://docs.python.org/library/socket.html#socket.socket.settimeout
socket.settimeout(value)
使用异步方法