在Python中终止线程中的socket.recv
为了在Python中实现一个简单的协议,我使用了一个线程来监控接收方发送的确认信息。为此,我在一个函数中使用了一个线程。
def ackListener(self):
while self.waitingforack:
ack = self.socket_agent.recv(4)
...
exit()
在这里,self.waitingforack
是一个布尔值,当我收到我发送的每条消息的确认时,我会把它设置为False
。
问题是我的代码在执行self.socket_agent.recv(4)
这个操作时会被阻塞,这意味着waitingforack
的值修改得太晚了。
有没有办法在我不再等待确认时强制结束这个线程呢?
谢谢!
1 个回答
4
记住,在你的情况下,像recv这样的操作是阻塞操作。也就是说,调用这个函数后,如果没有收到数据,它会一直停在那里,不会继续往下执行。
有两种方法可以解决这个问题:
让套接字变成非阻塞模式
socket.setblocking(0)
设置超时时间
可以参考这个链接:http://docs.python.org/library/socket.html#socket.socket.settimeoutsocket.settimeout(value)
使用异步方法